// File: /workspace/github_cpp_makefile_star2_O2/temelmertcan[P]multgen/src/adders.cpp
// Function: create_bk_adder(int, bool, 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>>>>>&)
void create_bk_adder (int size, bool carryin, std::queue<string>& verilog){

  int index = 0;

  string* g = new string[size];
  string* p = new string[size];

  string* gtmp = new string[size];
  string* ptmp = new string[size];


  ppx_preprocess(size,  carryin, index, "BK", gtmp, ptmp, verilog);
  pgtmp_to_pg(size, gtmp, g);
  pgtmp_to_pg(size, ptmp, p);

  verilog.push("\n// Brent-Kung Adder \n");

  int stage=0;

  verilog.push("");
  verilog.push("// BK Step 1: group pairs from close to far ");

  // bk first
  unsigned long long coef;
  for (coef = 1; coef*2-1 < size; coef *= 2){
    verilog.push("");
    verilog.push("// Stage " + to_string(++stage)+ " - pairs that are " + to_string(coef) + " index apart.");

    for (int i=2*coef-1; i < size; i+=coef*2){

      string new_p = "p_" + to_string(stage)+ "_" + to_string(i);
      string new_g = "g_" + to_string(stage)+ "_" + to_string(i);

      verilog.push ("wire logic "+ new_p + ";");
      verilog.push ("wire logic "+ new_g + ";");

      verilog.push ("assign "+ new_p + " = " + p[i] + " & " + p[i-coef] + ";");
      verilog.push ("assign "+ new_g + " = (" + p[i] + " & " + g[i-coef] + ") | " + g[i] + ";");

      gtmp[i] =  new_g;
      ptmp[i] =  new_p;
    }

    pgtmp_to_pg(size, gtmp, g);
    pgtmp_to_pg(size, ptmp, p);
  }

  verilog.push("");
  verilog.push("");
  verilog.push("// BK Step 2: group pairs from far to close ");

  if (coef < size)
    coef *= 2;

  for (coef = coef/4; coef >= 1; coef = coef/2){
    verilog.push("");
    verilog.push("// Stage " + to_string(++stage)+ " - pairs that are " + to_string(coef) + " index apart.");

    for (int i=3*coef-1; i < size; i+=coef*2){

      string new_p = "p_" + to_string(stage)+ "_" + to_string(i);
      string new_g = "g_" + to_string(stage)+ "_" + to_string(i);

      verilog.push ("wire logic "+ new_p + ";");
      verilog.push ("wire logic "+ new_g + ";");

      verilog.push ("assign "+ new_p + " = " + p[i] + " & " + p[i-coef] + ";");
      verilog.push ("assign "+ new_g + " = (" + p[i] + " & " + g[i-coef] + ") | " + g[i] + ";");

      gtmp[i] =  new_g;
      ptmp[i] =  new_p;
    }
    pgtmp_to_pg(size, gtmp, g);
    pgtmp_to_pg(size, ptmp, p);

  }

  verilog.push("");
  verilog.push("// BK postprocess ");

  ppx_postprocess (size, index, g, p, verilog);

  delete[] p;
  delete[] g;

  delete[] ptmp;
  delete[] gtmp;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1e8, %rsp            # imm = 0x1E8
movq %rdx, -0x30(%rbp)
movl %esi, %ebx
movl %edi, %r12d
movslq %edi, %r13
movq %r13, %r15
shlq $0x5, %r15
leaq 0x8(%r15), %rax
testl %r13d, %r13d
pushq $-0x1
popq %r14
cmovnsq %rax, %r14
movq %r14, %rdi
callq 0x2030
leaq 0x8(%rax), %rcx
movq %rcx, -0xf0(%rbp)
movq %r13, (%rax)
movq %r13, -0x68(%rbp)
testl %r13d, %r13d
je 0x176c2
addq $0x18, %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %r15
jne 0x176ac
movq -0xf0(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq %r14, %rdi
callq 0x2030
movq %rax, %r15
addq $0x8, %rax
movq %rax, -0x100(%rbp)
movq -0x68(%rbp), %rax
movq %rax, (%r15)
testl %eax, %eax
je 0x17713
leaq 0x18(%r15), %rax
movq -0x68(%rbp), %rcx
shlq $0x5, %rcx
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %rcx
jne 0x176fd
movq -0x100(%rbp), %rax
movq %rax, -0x150(%rbp)
movq %r14, %rdi
callq 0x2030
leaq 0x8(%rax), %rcx
movq %rcx, -0x160(%rbp)
movq -0x68(%rbp), %rcx
movq %rcx, (%rax)
testl %ecx, %ecx
je 0x17761
addq $0x18, %rax
movq -0x68(%rbp), %rcx
shlq $0x5, %rcx
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %rcx
jne 0x1774b
movq -0x160(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq %r14, %rdi
callq 0x2030
leaq 0x8(%rax), %rcx
movq %rcx, -0x158(%rbp)
movq -0x68(%rbp), %rcx
movq %rcx, (%rax)
testl %ecx, %ecx
je 0x177af
addq $0x18, %rax
movq -0x68(%rbp), %rcx
shlq $0x5, %rcx
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %rcx
jne 0x17799
movq -0x158(%rbp), %rax
movq %rax, -0xb8(%rbp)
leaq 0x19f1e(%rip), %rsi     # 0x316e2
leaq -0x208(%rbp), %rdi
leaq -0x58(%rbp), %rdx
callq 0x20b0
movq -0x30(%rbp), %rax
movq %rax, (%rsp)
movzbl %bl, %esi
leaq -0x208(%rbp), %rcx
leaq -0xc0(%rbp), %r8
leaq -0xb8(%rbp), %r9
movl %r12d, %edi
callq 0x13d7c
leaq -0x208(%rbp), %rdi
callq 0x20f0
leaq -0xc0(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
movl %r12d, %edi
callq 0x14ae8
leaq -0xb8(%rbp), %rsi
leaq -0x150(%rbp), %rdx
movl %r12d, %edi
callq 0x14ae8
leaq 0x1b4c0(%rip), %rsi     # 0x32cfb
leaq -0x58(%rbp), %rdi
leaq -0xe8(%rbp), %rdx
callq 0x20b0
leaq -0x58(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x120e4
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq 0x1bd69(%rip), %rsi     # 0x335d1
leaq -0x58(%rbp), %rdi
leaq -0xe8(%rbp), %rdx
callq 0x20b0
leaq -0x58(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x120e4
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq 0x1b47d(%rip), %rsi     # 0x32d12
leaq -0x58(%rbp), %rdi
leaq -0xe8(%rbp), %rdx
callq 0x20b0
movq %r15, -0x1a8(%rbp)
leaq -0x58(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x120e4
movl %r12d, -0x5c(%rbp)
leaq -0x58(%rbp), %r15
movq %r15, %rdi
callq 0x20f0
pushq $0x1
popq %rax
movl $0x0, -0x34(%rbp)
leaq -0xe8(%rbp), %r12
leaq (%rax,%rax), %rcx
movq %rcx, -0x70(%rbp)
movq %rax, -0x148(%rbp)
leaq -0x1(,%rax,2), %rax
cmpq -0x68(%rbp), %rax
jae 0x17e60
movq %rax, %r14
movq %r15, %rdi
leaq 0x1bcc9(%rip), %rsi     # 0x335d1
movq %r12, %rdx
callq 0x20b0
movq -0x30(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movl -0x34(%rbp), %esi
incl %esi
leaq -0x120(%rbp), %rbx
movq %rbx, %rdi
movl %esi, -0x34(%rbp)
callq 0x11c73
leaq -0x90(%rbp), %r13
movq %r13, %rdi
leaq 0x1b3f3(%rip), %rsi     # 0x32d3f
movq %rbx, %rdx
callq 0x11d49
leaq -0xb0(%rbp), %rdi
movq %r13, %rsi
leaq 0x1b3e4(%rip), %rdx     # 0x32d49
callq 0x11ba1
leaq -0x140(%rbp), %rbx
movq %rbx, %rdi
movq -0x148(%rbp), %rsi
callq 0x19511
movq %r12, %rdi
leaq -0xb0(%rbp), %rsi
movq %rbx, %rdx
callq 0x11bca
movq %r15, %rdi
movq %r12, %rsi
leaq 0x1b3bd(%rip), %rdx     # 0x32d5c
callq 0x11ba1
movq -0x30(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0x140(%rbp), %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x120(%rbp), %rdi
callq 0x20f0
movq %r14, %rax
cmpl -0x5c(%rbp), %eax
jge 0x17e2a
movq %rax, %r14
leaq -0x90(%rbp), %rbx
movq %rbx, %rdi
movl -0x34(%rbp), %esi
callq 0x11c73
leaq -0xb0(%rbp), %r13
movq %r13, %rdi
leaq 0x1ab97(%rip), %rsi     # 0x325b9
movq %rbx, %rdx
callq 0x11d49
movq %r12, %rdi
movq %r13, %rsi
leaq 0x1b70f(%rip), %rdx     # 0x33146
callq 0x11ba1
leaq -0x120(%rbp), %rbx
movq %rbx, %rdi
movl %r14d, %esi
callq 0x11c73
movq %r15, %rdi
movq %r12, %rsi
movq %rbx, %rdx
callq 0x11bca
movq %rbx, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %r13
movq %r13, %rdi
callq 0x20f0
movq %rbx, %rdi
movl -0x34(%rbp), %esi
callq 0x11c73
movq %r13, %rdi
leaq 0x1b1d6(%rip), %rsi     # 0x32c72
movq %rbx, %rdx
callq 0x11d49
leaq -0xb0(%rbp), %rdi
movq %r13, %rsi
leaq 0x1b691(%rip), %rdx     # 0x33146
callq 0x11ba1
leaq -0x140(%rbp), %rbx
movq %rbx, %rdi
movl %r14d, %esi
callq 0x11c73
movq %r12, %rdi
leaq -0xb0(%rbp), %r13
movq %r13, %rsi
movq %rbx, %rdx
callq 0x11bca
movq %rbx, %rdi
callq 0x20f0
movq %r13, %rdi
callq 0x20f0
leaq -0x90(%rbp), %rbx
movq %rbx, %rdi
callq 0x20f0
leaq -0x120(%rbp), %rdi
callq 0x20f0
movq %rbx, %rdi
leaq 0x1b143(%rip), %rsi     # 0x32c59
movq %r15, %rdx
callq 0x11cd3
movq %r13, %rdi
movq %rbx, %rsi
leaq 0x1bbb6(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq -0x30(%rbp), %rdi
movq %r13, %rsi
callq 0x120e4
movq %r13, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
movq %rbx, %rdi
leaq 0x1b103(%rip), %rsi     # 0x32c59
movq %r12, %rdx
callq 0x11cd3
movq %r13, %rdi
movq %rbx, %rsi
leaq 0x1bb76(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq -0x30(%rbp), %rdi
movq %r13, %rsi
callq 0x120e4
movq %r13, %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x180(%rbp), %rbx
movq %rbx, %rdi
leaq 0x1aa0e(%rip), %rsi     # 0x325af
movq %r15, %rdx
callq 0x11cd3
leaq -0x1a0(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
leaq 0x1a696(%rip), %rdx     # 0x32253
callq 0x11ba1
movslq %r14d, %r14
movq %r14, -0xf8(%rbp)
movq %r14, %r12
shlq $0x5, %r12
movq -0x100(%rbp), %rax
leaq (%rax,%r12), %rbx
movq %r15, %rsi
leaq -0x140(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rdx
callq 0x11d77
leaq -0x120(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x1b57e(%rip), %rdx     # 0x33185
callq 0x11ba1
movq -0xf8(%rbp), %r14
subq -0x148(%rbp), %r14
shlq $0x5, %r14
movq -0x100(%rbp), %rax
leaq (%rax,%r14), %rdx
leaq -0x90(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
callq 0x11d77
leaq -0xb0(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
leaq 0x1ba92(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq -0x30(%rbp), %rdi
movq %r13, %rsi
callq 0x120e4
movq %r13, %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x120(%rbp), %rdi
callq 0x20f0
leaq -0x140(%rbp), %rdi
callq 0x20f0
leaq -0x1a0(%rbp), %rdi
callq 0x20f0
leaq -0x180(%rbp), %rdi
callq 0x20f0
leaq -0x1c8(%rbp), %r13
movq %r13, %rdi
leaq 0x1a8fa(%rip), %rsi     # 0x325af
leaq -0xe8(%rbp), %rdx
callq 0x11cd3
leaq -0x1e8(%rbp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq 0x1a7d2(%rip), %rdx     # 0x324a7
callq 0x11ba1
leaq -0x180(%rbp), %r13
movq %r13, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x11d77
leaq -0x1a0(%rbp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x1b482(%rip), %rdx     # 0x33185
callq 0x11ba1
addq -0xf0(%rbp), %r14
leaq -0x140(%rbp), %r13
movq %r13, %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x11d77
leaq -0x120(%rbp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x1b330(%rip), %rdx     # 0x33068
callq 0x11ba1
movq -0xf0(%rbp), %rax
leaq (%rax,%r12), %rdx
leaq -0x90(%rbp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x11d77
leaq -0xb0(%rbp), %r15
movq %r15, %rdi
movq %r14, %rsi
leaq 0x1b973(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq -0x30(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
leaq -0x140(%rbp), %rdi
callq 0x20f0
leaq -0x1a0(%rbp), %rdi
callq 0x20f0
leaq -0x180(%rbp), %rdi
callq 0x20f0
leaq -0x1e8(%rbp), %rdi
callq 0x20f0
leaq -0x1c8(%rbp), %rdi
callq 0x20f0
movq -0x160(%rbp), %rax
leaq (%rax,%r12), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x2130
leaq -0x58(%rbp), %rbx
addq -0x158(%rbp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq 0x2130
leaq -0xe8(%rbp), %r12
movq %r12, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
movq -0xf8(%rbp), %rax
addq -0x70(%rbp), %rax
movq %rbx, %r15
jmp 0x179f3
movl -0x5c(%rbp), %ebx
movl %ebx, %edi
leaq -0xc0(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0x14ae8
movl %ebx, %edi
leaq -0xb8(%rbp), %rsi
leaq -0x150(%rbp), %rdx
callq 0x14ae8
movq -0x70(%rbp), %rax
jmp 0x178da
leaq 0x1b76a(%rip), %rsi     # 0x335d1
leaq -0x58(%rbp), %rdi
leaq -0xe8(%rbp), %rdx
callq 0x20b0
leaq -0x58(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x120e4
movl -0x5c(%rbp), %r15d
movq -0x148(%rbp), %rbx
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq 0x1b732(%rip), %rsi     # 0x335d1
leaq -0x58(%rbp), %rdi
leaq -0xe8(%rbp), %rdx
callq 0x20b0
leaq -0x58(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x120e4
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq 0x1ae9e(%rip), %rsi     # 0x32d6a
leaq -0x58(%rbp), %rdi
leaq -0xe8(%rbp), %rdx
callq 0x20b0
leaq -0x58(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x120e4
leaq -0x58(%rbp), %rdi
callq 0x20f0
cmpq -0x68(%rbp), %rbx
movq -0x70(%rbp), %rax
cmovaeq %rbx, %rax
shrq $0x2, %rax
leaq -0xe8(%rbp), %r13
leaq -0x120(%rbp), %r12
movq %rax, -0x70(%rbp)
testq %rax, %rax
je 0x18482
leaq -0x58(%rbp), %rbx
movq %rbx, %rdi
leaq 0x1b6a6(%rip), %rsi     # 0x335d1
movq %r13, %rdx
callq 0x20b0
movq -0x30(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movl -0x34(%rbp), %esi
incl %esi
movq %r12, %rdi
movl %esi, -0x34(%rbp)
callq 0x11c73
leaq -0x90(%rbp), %r14
movq %r14, %rdi
leaq 0x1add7(%rip), %rsi     # 0x32d3f
movq %r12, %rdx
callq 0x11d49
leaq -0xb0(%rbp), %rdi
movq %r14, %rsi
leaq 0x1adc8(%rip), %rdx     # 0x32d49
callq 0x11ba1
leaq -0x140(%rbp), %r14
movq %r14, %rdi
movq -0x70(%rbp), %rsi
callq 0x19511
movq %r13, %rdi
leaq -0xb0(%rbp), %rsi
movq %r14, %rdx
callq 0x11bca
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x1ada4(%rip), %rdx     # 0x32d5c
callq 0x11ba1
movq -0x30(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
movq %r13, %rdi
callq 0x20f0
leaq -0x140(%rbp), %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
movq -0x70(%rbp), %rax
leal (%rax,%rax,2), %r13d
decl %r13d
addl %eax, %eax
movl %eax, -0xf0(%rbp)
cmpl %r15d, %r13d
jge 0x18443
leaq -0x90(%rbp), %r14
movq %r14, %rdi
movl -0x34(%rbp), %esi
callq 0x11c73
leaq -0xb0(%rbp), %r15
movq %r15, %rdi
leaq 0x1a575(%rip), %rsi     # 0x325b9
movq %r14, %rdx
callq 0x11d49
leaq -0xe8(%rbp), %rdi
movq %r15, %rsi
leaq 0x1b0e9(%rip), %rdx     # 0x33146
callq 0x11ba1
movq %r12, %rdi
movl %r13d, %esi
callq 0x11c73
movq %rbx, %rdi
movq %r12, %rbx
leaq -0xe8(%rbp), %r12
movq %r12, %rsi
movq %rbx, %rdx
callq 0x11bca
movq %rbx, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
movq %r15, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq %rbx, %rdi
movl -0x34(%rbp), %esi
callq 0x11c73
movq %r14, %rdi
leaq 0x1abb8(%rip), %rsi     # 0x32c72
movq %rbx, %rdx
callq 0x11d49
movq %r15, %rdi
movq %r14, %rsi
leaq 0x1b077(%rip), %rdx     # 0x33146
callq 0x11ba1
movl %r13d, %esi
leaq -0x140(%rbp), %r13
movq %r13, %rdi
movl %esi, -0xf8(%rbp)
callq 0x11c73
leaq -0xe8(%rbp), %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x11bca
movq %r13, %rdi
callq 0x20f0
movq %r15, %rdi
callq 0x20f0
leaq -0x90(%rbp), %r13
movq %r13, %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
movq %r13, %rdi
leaq 0x1ab2a(%rip), %rsi     # 0x32c59
leaq -0x58(%rbp), %rbx
movq %rbx, %rdx
callq 0x11cd3
movq %r15, %rdi
movq %r13, %rsi
leaq 0x1b599(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq -0x30(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %r13, %rdi
callq 0x20f0
movq %r13, %rdi
leaq 0x1aae6(%rip), %rsi     # 0x32c59
leaq -0xe8(%rbp), %rdx
callq 0x11cd3
movq %r15, %rdi
movq %r13, %rsi
leaq 0x1b555(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq -0x30(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %r13, %rdi
callq 0x20f0
leaq -0x180(%rbp), %r14
movq %r14, %rdi
leaq 0x1a3f1(%rip), %rsi     # 0x325af
movq %rbx, %rdx
callq 0x11cd3
leaq -0x1a0(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq 0x1a079(%rip), %rdx     # 0x32253
callq 0x11ba1
movslq -0xf8(%rbp), %rbx
movq %rbx, %r13
shlq $0x5, %r13
movq -0x100(%rbp), %rax
leaq (%rax,%r13), %r15
leaq -0x140(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
movq %r15, %rdx
callq 0x11d77
leaq -0x120(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq 0x1af64(%rip), %rdx     # 0x33185
callq 0x11ba1
subq -0x70(%rbp), %rbx
shlq $0x5, %rbx
movq -0x100(%rbp), %rax
leaq (%rax,%rbx), %rdx
leaq -0x90(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
callq 0x11d77
leaq -0xb0(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq 0x1b482(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq -0x30(%rbp), %rdi
movq %r12, %rsi
callq 0x120e4
movq %r12, %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x120(%rbp), %rdi
callq 0x20f0
leaq -0x140(%rbp), %rdi
callq 0x20f0
leaq -0x1a0(%rbp), %rdi
callq 0x20f0
leaq -0x180(%rbp), %rdi
callq 0x20f0
leaq -0x1c8(%rbp), %r14
movq %r14, %rdi
leaq 0x1a2ea(%rip), %rsi     # 0x325af
leaq -0xe8(%rbp), %rdx
callq 0x11cd3
leaq -0x1e8(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq 0x1a1c2(%rip), %rdx     # 0x324a7
callq 0x11ba1
leaq -0x180(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
movq %r15, %rdx
callq 0x11d77
leaq -0x1a0(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq 0x1ae72(%rip), %rdx     # 0x33185
callq 0x11ba1
movq -0xc8(%rbp), %r15
addq %r15, %rbx
leaq -0x140(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
movq %rbx, %rdx
callq 0x11d77
leaq -0x120(%rbp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x1ad1d(%rip), %rdx     # 0x33068
callq 0x11ba1
addq %r13, %r15
leaq -0x90(%rbp), %r12
movq %r12, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x11d77
leaq -0xb0(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
leaq 0x1b365(%rip), %rdx     # 0x336e1
callq 0x11ba1
movq -0x30(%rbp), %rdi
movq %r14, %rsi
callq 0x120e4
movq %r14, %rdi
callq 0x20f0
movq %r12, %rdi
callq 0x20f0
leaq -0x120(%rbp), %rdi
callq 0x20f0
leaq -0x140(%rbp), %rdi
callq 0x20f0
leaq -0x1a0(%rbp), %rdi
callq 0x20f0
leaq -0x180(%rbp), %rdi
callq 0x20f0
leaq -0x1e8(%rbp), %rdi
callq 0x20f0
leaq -0x1c8(%rbp), %rdi
callq 0x20f0
movq -0xc0(%rbp), %rdi
addq %r13, %rdi
leaq -0xe8(%rbp), %rsi
callq 0x2130
leaq -0x58(%rbp), %rbx
addq -0xb8(%rbp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x2130
leaq -0xe8(%rbp), %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x20f0
movl -0xf8(%rbp), %r13d
addl -0xf0(%rbp), %r13d
movl -0x5c(%rbp), %r15d
leaq -0x120(%rbp), %r12
jmp 0x18018
movl %r15d, %edi
leaq -0xc0(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
callq 0x14ae8
movl %r15d, %edi
leaq -0xb8(%rbp), %rsi
leaq -0x150(%rbp), %rdx
callq 0x14ae8
movq -0x70(%rbp), %rax
shrq %rax
leaq -0xe8(%rbp), %r13
jmp 0x17f10
leaq 0x1b148(%rip), %rsi     # 0x335d1
leaq -0x58(%rbp), %rdi
leaq -0xe8(%rbp), %rdx
callq 0x20b0
leaq -0x58(%rbp), %rsi
movq -0x30(%rbp), %rdi
callq 0x120e4
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq 0x1a8e1(%rip), %rsi     # 0x32d97
leaq -0x58(%rbp), %rdi
leaq -0xe8(%rbp), %rdx
callq 0x20b0
leaq -0x58(%rbp), %rsi
movq -0x30(%rbp), %rbx
movq %rbx, %rdi
callq 0x120e4
leaq -0x58(%rbp), %rdi
callq 0x20f0
leaq -0xc8(%rbp), %rdx
movl %r15d, %edi
movq %rbx, %r8
callq 0x146e9
movq -0x1a8(%rbp), %r15
movq (%r15), %rbx
testq %rbx, %rbx
je 0x1851a
shlq $0x5, %rbx
movq %r15, %r14
addq $-0x18, %r14
leaq (%r14,%rbx), %rdi
callq 0x20f0
addq $-0x20, %rbx
jne 0x1850b
movq %r15, %rdi
callq 0x2230
movq -0xc8(%rbp), %r14
testq %r14, %r14
je 0x1855a
leaq -0x8(%r14), %rbx
movq -0x8(%r14), %r15
testq %r15, %r15
je 0x18552
addq $-0x20, %r14
shlq $0x5, %r15
leaq (%r14,%r15), %rdi
callq 0x20f0
addq $-0x20, %r15
jne 0x18543
movq %rbx, %rdi
callq 0x2230
movq -0xb8(%rbp), %r14
testq %r14, %r14
je 0x18592
leaq -0x8(%r14), %rbx
movq -0x8(%r14), %r15
testq %r15, %r15
je 0x1858a
addq $-0x20, %r14
shlq $0x5, %r15
leaq (%r14,%r15), %rdi
callq 0x20f0
addq $-0x20, %r15
jne 0x1857b
movq %rbx, %rdi
callq 0x2230
movq -0xc0(%rbp), %r14
testq %r14, %r14
je 0x185ca
leaq -0x8(%r14), %rbx
movq -0x8(%r14), %r15
testq %r15, %r15
je 0x185c2
addq $-0x20, %r14
shlq $0x5, %r15
leaq (%r14,%r15), %rdi
callq 0x20f0
addq $-0x20, %r15
jne 0x185b3
movq %rbx, %rdi
callq 0x2230
addq $0x1e8, %rsp            # imm = 0x1E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x18856
jmp 0x18655
jmp 0x18856
jmp 0x18655
jmp 0x18856
jmp 0x18655
jmp 0x18856
jmp 0x18655
jmp 0x18856
jmp 0x18655
jmp 0x18856
jmp 0x18655
jmp 0x18856
jmp 0x18655
jmp 0x18856
jmp 0x18655
movq %rax, %rbx
leaq -0x208(%rbp), %rdi
jmp 0x188fa
jmp 0x18655
jmp 0x1863d
jmp 0x18647
jmp 0x18638
jmp 0x1867f
jmp 0x18655
jmp 0x1866e
jmp 0x18856
jmp 0x1865d
movq %rax, %rbx
jmp 0x1868e
movq %rax, %rbx
jmp 0x1869a
jmp 0x18856
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0x20f0
jmp 0x18660
movq %rax, %rbx
jmp 0x188ff
movq %rax, %rbx
leaq -0xe8(%rbp), %rdi
callq 0x20f0
jmp 0x18671
movq %rax, %rbx
leaq -0x140(%rbp), %rdi
callq 0x20f0
jmp 0x18682
movq %rax, %rbx
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x120(%rbp), %rdi
jmp 0x188fa
jmp 0x187bd
jmp 0x188e7
jmp 0x18801
jmp 0x18796
jmp 0x18738
jmp 0x1879b
jmp 0x187b8
jmp 0x18759
jmp 0x18740
jmp 0x18768
jmp 0x187ce
jmp 0x18751
jmp 0x1875e
jmp 0x1876d
jmp 0x188e7
jmp 0x1884c
jmp 0x188b3
jmp 0x1883b
jmp 0x1887b
jmp 0x1888a
jmp 0x18856
jmp 0x1888a
jmp 0x18885
jmp 0x18880
jmp 0x188e7
jmp 0x1889b
jmp 0x1883b
jmp 0x1885e
jmp 0x18825
jmp 0x188e7
jmp 0x18833
movq %rax, %rbx
jmp 0x18810
movq %rax, %rbx
leaq -0xb0(%rbp), %rdi
callq 0x20f0
jmp 0x1879e
movq %rax, %rbx
jmp 0x187e9
movq %rax, %rbx
jmp 0x1877c
movq %rax, %rbx
jmp 0x18788
jmp 0x188e7
movq %rax, %rbx
jmp 0x187aa
movq %rax, %rbx
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x120(%rbp), %rdi
callq 0x20f0
jmp 0x187c0
movq %rax, %rbx
jmp 0x187f5
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x120(%rbp), %rdi
callq 0x20f0
jmp 0x18804
movq %rax, %rbx
jmp 0x187dd
movq %rax, %rbx
leaq -0x140(%rbp), %rdi
callq 0x20f0
jmp 0x187d1
movq %rax, %rbx
leaq -0x1a0(%rbp), %rdi
callq 0x20f0
leaq -0x180(%rbp), %rdi
callq 0x20f0
leaq -0x1e8(%rbp), %rdi
callq 0x20f0
leaq -0x1c8(%rbp), %rdi
jmp 0x18894
movq %rax, %rbx
leaq -0x140(%rbp), %rdi
callq 0x20f0
leaq -0x1a0(%rbp), %rdi
callq 0x20f0
leaq -0x180(%rbp), %rdi
jmp 0x18894
movq %rax, %rbx
jmp 0x1886d
jmp 0x1883b
jmp 0x188e7
jmp 0x1888a
movq %rax, %rbx
jmp 0x188c2
movq %rax, %rbx
leaq -0xb0(%rbp), %rdi
callq 0x20f0
jmp 0x1888d
movq %rax, %rbx
jmp 0x1881c
jmp 0x188e7
movq %rax, %rbx
jmp 0x188f6
movq %rax, %rbx
leaq -0x140(%rbp), %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
jmp 0x1889e
movq %rax, %rbx
jmp 0x188da
movq %rax, %rbx
jmp 0x188ce
movq %rax, %rbx
jmp 0x188aa
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x20f0
jmp 0x188ea
movq %rax, %rbx
leaq -0x90(%rbp), %rdi
callq 0x20f0
leaq -0x120(%rbp), %rdi
jmp 0x188f1
movq %rax, %rbx
leaq -0x120(%rbp), %rdi
callq 0x20f0
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0xb0(%rbp), %rdi
callq 0x20f0
leaq -0x90(%rbp), %rdi
jmp 0x188fa
jmp 0x188e7
jmp 0x188e7
movq %rax, %rbx
leaq -0xe8(%rbp), %rdi
callq 0x20f0
leaq -0x58(%rbp), %rdi
callq 0x20f0
movq %rbx, %rdi
callq 0x2330