// File: ncbi[P]amr/tsv.cpp
// Function: Common_sp::TextTable::group(Common_sp::StringVector const&, Common_sp::StringVector const&, Common_sp::StringVector const&, Common_sp::StringVector const&, Common_sp::StringVector const&)
void TextTable::group (const StringVector &by,
                       const StringVector &sum,
                       const StringVector &minV,
                       const StringVector &maxV,
                       const StringVector &aggr)
{
  const Vector<ColNum> byIndex   (columns2nums (by));
  const Vector<ColNum> sumIndex  (columns2nums (sum));
  const Vector<ColNum> minIndex  (columns2nums (minV));
  const Vector<ColNum> maxIndex  (columns2nums (maxV));
  const Vector<ColNum> aggrIndex (columns2nums (aggr));
  
  // QC
  {
    ColumnPartitionQC cp;
    cp. add (by, "group by");
    cp. add (sum, "sum");
    cp. add (minV, "min");
    cp. add (maxV, "max");
    cp. add (aggr, "aggregation");
  }
  for (const string& s : sum)
    if (! header [col2num (s)]. numeric)
      throw runtime_error ("Summation column " + strQuote (s) + " is not numeric");

  sort (by);
  
  RowNum i = 0;  
  FFOR_START (RowNum, j, 1, rows. size ())
  {
    ASSERT (i < j);
    if (rows [i]. same (rows [j], byIndex))
      merge (i, j, sumIndex, minIndex, maxIndex, aggrIndex);
    else
    {
      i++;
      if (i < j)
        rows [i] = std::move (rows [j]);
    }
  }
  if (! rows. empty ())
    i++;

  ASSERT (rows. size () >= i);
  FFOR (RowNum, k, rows. size () - i)
    rows. pop_back ();
    
  StringVector newColumns;
  newColumns << by << sum << minV << maxV << aggr;
  filterColumns (newColumns);
}

// Assembly:
subq $0x5b8, %rsp            # imm = 0x5B8
movq %rdi, 0x5b0(%rsp)
movq %rsi, 0x5a8(%rsp)
movq %rdx, 0x5a0(%rsp)
movq %rcx, 0x598(%rsp)
movq %r8, 0x590(%rsp)
movq %r9, 0x588(%rsp)
movq 0x5b0(%rsp), %rsi
movq %rsi, 0xe8(%rsp)
movq 0x5a8(%rsp), %rdx
leaq 0x568(%rsp), %rdi
callq 0xc0760
movq 0xe8(%rsp), %rsi
movq 0x5a0(%rsp), %rdx
leaq 0x548(%rsp), %rdi
callq 0xc0760
jmp 0xba9bb
movq 0xe8(%rsp), %rsi
movq 0x598(%rsp), %rdx
leaq 0x518(%rsp), %rdi
callq 0xc0760
jmp 0xba9da
movq 0xe8(%rsp), %rsi
movq 0x590(%rsp), %rdx
leaq 0x4f8(%rsp), %rdi
callq 0xc0760
jmp 0xba9f9
movq 0xe8(%rsp), %rsi
movq 0x588(%rsp), %rdx
leaq 0x4d8(%rsp), %rdi
callq 0xc0760
jmp 0xbaa18
leaq 0x4a8(%rsp), %rdi
callq 0xbb9b0
movq 0x5a8(%rsp), %rax
movq %rax, 0xd8(%rsp)
leaq 0x487(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0xcd00
movq 0xe0(%rsp), %rdx
leaq 0x16ef6(%rip), %rsi     # 0xd194f
leaq 0x488(%rsp), %rdi
callq 0x29fd0
jmp 0xbaa68
movq 0xd8(%rsp), %rsi
leaq 0x4a8(%rsp), %rdi
leaq 0x488(%rsp), %rdx
callq 0xbb9c0
jmp 0xbaa87
leaq 0x488(%rsp), %rdi
callq 0xce98
leaq 0x487(%rsp), %rdi
callq 0xc7a0
movq 0x5a0(%rsp), %rax
movq %rax, 0xc8(%rsp)
leaq 0x45f(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0xcd00
movq 0xd0(%rsp), %rdx
leaq 0x16e83(%rip), %rsi     # 0xd1958
leaq 0x460(%rsp), %rdi
callq 0x29fd0
jmp 0xbaae4
movq 0xc8(%rsp), %rsi
leaq 0x4a8(%rsp), %rdi
leaq 0x460(%rsp), %rdx
callq 0xbb9c0
jmp 0xbab03
leaq 0x460(%rsp), %rdi
callq 0xce98
leaq 0x45f(%rsp), %rdi
callq 0xc7a0
movq 0x598(%rsp), %rax
movq %rax, 0xb8(%rsp)
leaq 0x437(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0xcd00
movq 0xc0(%rsp), %rdx
leaq 0x10822(%rip), %rsi     # 0xcb373
leaq 0x438(%rsp), %rdi
callq 0x29fd0
jmp 0xbab60
movq 0xb8(%rsp), %rsi
leaq 0x4a8(%rsp), %rdi
leaq 0x438(%rsp), %rdx
callq 0xbb9c0
jmp 0xbab7f
leaq 0x438(%rsp), %rdi
callq 0xce98
leaq 0x437(%rsp), %rdi
callq 0xc7a0
movq 0x590(%rsp), %rax
movq %rax, 0xa8(%rsp)
leaq 0x40f(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0xcd00
movq 0xb0(%rsp), %rdx
leaq 0x1254c(%rip), %rsi     # 0xcd119
leaq 0x410(%rsp), %rdi
callq 0x29fd0
jmp 0xbabdc
movq 0xa8(%rsp), %rsi
leaq 0x4a8(%rsp), %rdi
leaq 0x410(%rsp), %rdx
callq 0xbb9c0
jmp 0xbabfb
leaq 0x410(%rsp), %rdi
callq 0xce98
leaq 0x40f(%rsp), %rdi
callq 0xc7a0
movq 0x588(%rsp), %rax
movq %rax, 0x98(%rsp)
leaq 0x3e7(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0xcd00
movq 0xa0(%rsp), %rdx
leaq 0x16d13(%rip), %rsi     # 0xd195c
leaq 0x3e8(%rsp), %rdi
callq 0x29fd0
jmp 0xbac58
movq 0x98(%rsp), %rsi
leaq 0x4a8(%rsp), %rdi
leaq 0x3e8(%rsp), %rdx
callq 0xbb9c0
jmp 0xbac77
leaq 0x3e8(%rsp), %rdi
callq 0xce98
leaq 0x3e7(%rsp), %rdi
callq 0xc7a0
leaq 0x4a8(%rsp), %rdi
callq 0xbbd30
movq 0x5a0(%rsp), %rax
movq %rax, 0x3d8(%rsp)
movq 0x3d8(%rsp), %rdi
callq 0x35930
movq %rax, 0x3d0(%rsp)
movq 0x3d8(%rsp), %rdi
callq 0x358f0
movq %rax, 0x3c8(%rsp)
leaq 0x3d0(%rsp), %rdi
leaq 0x3c8(%rsp), %rsi
callq 0x35820
testb $0x1, %al
jne 0xbacf6
jmp 0xbb0b2
leaq 0x3d0(%rsp), %rdi
callq 0x35960
movq 0xe8(%rsp), %rdi
movq %rax, 0x3c0(%rsp)
movq %rdi, %rax
addq $0x30, %rax
movq %rax, 0x88(%rsp)
movq 0x3c0(%rsp), %rsi
callq 0x303c0
movq %rax, 0x90(%rsp)
jmp 0xbad39
movq 0x90(%rsp), %rsi
movq 0x88(%rsp), %rdi
callq 0xbfee0
movq %rax, 0x80(%rsp)
jmp 0xbad58
movq 0x80(%rsp), %rax
testb $0x1, 0x30(%rax)
jne 0xbb09e
movb $0x1, 0x35f(%rsp)
movl $0x10, %edi
callq 0xc3b0
movq %rax, 0x78(%rsp)
movq 0x3c0(%rsp), %rsi
leaq 0x360(%rsp), %rdi
movl $0x22, %edx
callq 0x424f0
jmp 0xbad9d
leaq 0x16bc4(%rip), %rsi     # 0xd1968
leaq 0x380(%rsp), %rdi
leaq 0x360(%rsp), %rdx
callq 0x2a340
jmp 0xbadbb
leaq 0x16bb8(%rip), %rdx     # 0xd197a
leaq 0x3a0(%rsp), %rdi
leaq 0x380(%rsp), %rsi
callq 0x2a2f0
jmp 0xbadd9
movq 0x78(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0xcbb0
jmp 0xbaded
movq 0x78(%rsp), %rdi
movb $0x0, 0x35f(%rsp)
movq 0x4b1ef(%rip), %rsi     # 0x105ff0
movq 0x4b168(%rip), %rdx     # 0x105f70
callq 0xcc80
jmp 0xbb9a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb988
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb97b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb96e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb961
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbaead
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x488(%rsp), %rdi
callq 0xce98
leaq 0x487(%rsp), %rdi
callq 0xc7a0
jmp 0xbafdb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbaef6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x460(%rsp), %rdi
callq 0xce98
leaq 0x45f(%rsp), %rdi
callq 0xc7a0
jmp 0xbafdb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbaf3f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x438(%rsp), %rdi
callq 0xce98
leaq 0x437(%rsp), %rdi
callq 0xc7a0
jmp 0xbafdb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbaf88
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x410(%rsp), %rdi
callq 0xce98
leaq 0x40f(%rsp), %rdi
callq 0xc7a0
jmp 0xbafdb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbafce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x3e8(%rsp), %rdi
callq 0xce98
leaq 0x3e7(%rsp), %rdi
callq 0xc7a0
leaq 0x4a8(%rsp), %rdi
callq 0xbbd30
jmp 0xbb954
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb954
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb083
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb076
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb069
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x3a0(%rsp), %rdi
callq 0xce98
leaq 0x380(%rsp), %rdi
callq 0xce98
leaq 0x360(%rsp), %rdi
callq 0xce98
testb $0x1, 0x35f(%rsp)
jne 0xbb08f
jmp 0xbb099
movq 0x78(%rsp), %rdi
callq 0xc580
jmp 0xbb954
jmp 0xbb0a0
leaq 0x3d0(%rsp), %rdi
callq 0x38e20
jmp 0xbacd8
movq 0xe8(%rsp), %rdi
movq 0x5a8(%rsp), %rsi
callq 0xba850
jmp 0xbb0c9
movq 0xe8(%rsp), %rdi
movq $0x0, 0x350(%rsp)
movq $0x1, 0x348(%rsp)
addq $0x50, %rdi
callq 0x380d0
movq %rax, 0x340(%rsp)
movq 0x348(%rsp), %rax
cmpq 0x340(%rsp), %rax
jae 0xbb4f8
callq 0xc090
movl $0x0, (%rax)
movq 0x350(%rsp), %rax
cmpq 0x348(%rsp), %rax
jb 0xbb3b8
callq 0xc8c0
cmpl $0x0, %eax
jne 0xbb3ae
leaq 0x29f(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0xcd00
movq 0x70(%rsp), %rdx
leaq 0x1656c(%rip), %rsi     # 0xd16c9
leaq 0x2a0(%rsp), %rdi
callq 0x29fd0
jmp 0xbb16c
leaq 0x278(%rsp), %rdi
movl $0x24d, %esi            # imm = 0x24D
callq 0x2ded0
jmp 0xbb180
leaq 0x2c0(%rsp), %rdi
leaq 0x2a0(%rsp), %rsi
leaq 0x278(%rsp), %rdx
callq 0x2dde0
jmp 0xbb19f
leaq 0x109fb(%rip), %rdx     # 0xcbba1
leaq 0x2e0(%rsp), %rdi
leaq 0x2c0(%rsp), %rsi
callq 0x2a2f0
jmp 0xbb1bd
leaq 0x237(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0xcd00
movq 0x68(%rsp), %rdx
leaq 0x167af(%rip), %rsi     # 0xd198a
leaq 0x238(%rsp), %rdi
callq 0x29fd0
jmp 0xbb1ea
leaq 0x12825(%rip), %rdx     # 0xcda16
leaq 0x258(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0x2a2f0
jmp 0xbb208
leaq 0x300(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
leaq 0x258(%rsp), %rdx
callq 0x2dde0
jmp 0xbb227
leaq 0x167eb(%rip), %rdx     # 0xd1a19
leaq 0x320(%rsp), %rdi
leaq 0x300(%rsp), %rsi
callq 0x2a2f0
jmp 0xbb245
leaq 0x320(%rsp), %rdi
callq 0x3e9b0
jmp 0xbb254
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb39c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb38f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb375
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb35b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb34e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb341
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb334
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x320(%rsp), %rdi
callq 0xce98
leaq 0x300(%rsp), %rdi
callq 0xce98
leaq 0x258(%rsp), %rdi
callq 0xce98
leaq 0x238(%rsp), %rdi
callq 0xce98
leaq 0x237(%rsp), %rdi
callq 0xc7a0
leaq 0x2e0(%rsp), %rdi
callq 0xce98
leaq 0x2c0(%rsp), %rdi
callq 0xce98
leaq 0x278(%rsp), %rdi
callq 0xce98
leaq 0x2a0(%rsp), %rdi
callq 0xce98
leaq 0x29f(%rsp), %rdi
callq 0xc7a0
jmp 0xbb954
movl $0x1, %edi
callq 0xc8d0
movq 0xe8(%rsp), %rdi
addq $0x50, %rdi
movq 0x350(%rsp), %rsi
callq 0x38120
movq %rax, 0x60(%rsp)
jmp 0xbb3d8
movq 0xe8(%rsp), %rdi
addq $0x50, %rdi
movq 0x348(%rsp), %rsi
callq 0x38120
movq %rax, 0x58(%rsp)
jmp 0xbb3f8
movq 0x58(%rsp), %rsi
movq 0x60(%rsp), %rdi
leaq 0x568(%rsp), %rdx
callq 0x4deb0
movb %al, 0x57(%rsp)
jmp 0xbb415
movb 0x57(%rsp), %al
testb $0x1, %al
jne 0xbb41f
jmp 0xbb466
movq 0xe8(%rsp), %rdi
movq 0x350(%rsp), %rsi
movq 0x348(%rsp), %rdx
movq %rsp, %rax
leaq 0x4d8(%rsp), %rcx
movq %rcx, (%rax)
leaq 0x548(%rsp), %rcx
leaq 0x518(%rsp), %r8
leaq 0x4f8(%rsp), %r9
callq 0xbbd40
jmp 0xbb464
jmp 0xbb4dd
movq 0x350(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x350(%rsp)
movq 0x350(%rsp), %rax
cmpq 0x348(%rsp), %rax
jae 0xbb4db
movq 0xe8(%rsp), %rdi
addq $0x50, %rdi
movq 0x348(%rsp), %rsi
callq 0x38120
movq %rax, 0x48(%rsp)
jmp 0xbb4ac
movq 0xe8(%rsp), %rdi
addq $0x50, %rdi
movq 0x350(%rsp), %rsi
callq 0x38120
movq %rax, 0x40(%rsp)
jmp 0xbb4cc
movq 0x48(%rsp), %rsi
movq 0x40(%rsp), %rdi
callq 0x3a810
jmp 0xbb4dd
jmp 0xbb4df
movq 0x348(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x348(%rsp)
jmp 0xbb0fa
movq 0xe8(%rsp), %rdi
addq $0x50, %rdi
callq 0xc09e0
testb $0x1, %al
jne 0xbb521
movq 0x350(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x350(%rsp)
callq 0xc090
movq 0xe8(%rsp), %rdi
movl $0x0, (%rax)
addq $0x50, %rdi
callq 0x380d0
cmpq 0x350(%rsp), %rax
jae 0xbb7d2
callq 0xc8c0
cmpl $0x0, %eax
jne 0xbb7c8
leaq 0x18f(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0xcd00
movq 0x38(%rsp), %rdx
leaq 0x16152(%rip), %rsi     # 0xd16c9
leaq 0x190(%rsp), %rdi
callq 0x29fd0
jmp 0xbb586
leaq 0x168(%rsp), %rdi
movl $0x25a, %esi            # imm = 0x25A
callq 0x2ded0
jmp 0xbb59a
leaq 0x1b0(%rsp), %rdi
leaq 0x190(%rsp), %rsi
leaq 0x168(%rsp), %rdx
callq 0x2dde0
jmp 0xbb5b9
leaq 0x105e1(%rip), %rdx     # 0xcbba1
leaq 0x1d0(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x2a2f0
jmp 0xbb5d7
leaq 0x127(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0xcd00
movq 0x30(%rsp), %rdx
leaq 0x16395(%rip), %rsi     # 0xd198a
leaq 0x128(%rsp), %rdi
callq 0x29fd0
jmp 0xbb604
leaq 0x1240b(%rip), %rdx     # 0xcda16
leaq 0x148(%rsp), %rdi
leaq 0x128(%rsp), %rsi
callq 0x2a2f0
jmp 0xbb622
leaq 0x1f0(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
leaq 0x148(%rsp), %rdx
callq 0x2dde0
jmp 0xbb641
leaq 0x163d7(%rip), %rdx     # 0xd1a1f
leaq 0x210(%rsp), %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x2a2f0
jmp 0xbb65f
leaq 0x210(%rsp), %rdi
callq 0x3e9b0
jmp 0xbb66e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb7b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb7a9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb79c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb78f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb775
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb768
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb75b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0xbb74e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x210(%rsp), %rdi
callq 0xce98
leaq 0x1f0(%rsp), %rdi
callq 0xce98
leaq 0x148(%rsp), %rdi
callq 0xce98
leaq 0x128(%rsp), %rdi
callq 0xce98
leaq 0x127(%rsp), %rdi
callq 0xc7a0
leaq 0x1d0(%rsp), %rdi
callq 0xce98
leaq 0x1b0(%rsp), %rdi
callq 0xce98
leaq 0x168(%rsp), %rdi
callq 0xce98
leaq 0x190(%rsp), %rdi
callq 0xce98
leaq 0x18f(%rsp), %rdi
callq 0xc7a0
jmp 0xbb954
movl $0x1, %edi
callq 0xc8d0
movq 0xe8(%rsp), %rdi
movq $0x0, 0x118(%rsp)
addq $0x50, %rdi
callq 0x380d0
subq 0x350(%rsp), %rax
movq %rax, 0x110(%rsp)
movq 0x118(%rsp), %rax
cmpq 0x110(%rsp), %rax
jae 0xbb83c
movq 0xe8(%rsp), %rdi
addq $0x50, %rdi
callq 0xc0a30
jmp 0xbb824
jmp 0xbb826
movq 0x118(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x118(%rsp)
jmp 0xbb7ff
leaq 0xf0(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x2ef00
movq 0x20(%rsp), %rdi
movq 0x5a8(%rsp), %rsi
callq 0xc0ac0
movq %rax, 0x28(%rsp)
jmp 0xbb867
movq 0x28(%rsp), %rdi
movq 0x5a0(%rsp), %rsi
callq 0xc0ac0
movq %rax, 0x18(%rsp)
jmp 0xbb880
movq 0x18(%rsp), %rdi
movq 0x598(%rsp), %rsi
callq 0xc0ac0
movq %rax, 0x10(%rsp)
jmp 0xbb899
movq 0x10(%rsp), %rdi
movq 0x590(%rsp), %rsi
callq 0xc0ac0
movq %rax, 0x8(%rsp)
jmp 0xbb8b2
movq 0x8(%rsp), %rdi
movq 0x588(%rsp), %rsi
callq 0xc0ac0
jmp 0xbb8c6
movq 0xe8(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
callq 0xba550
jmp 0xbb8dd
leaq 0xf0(%rsp), %rdi
callq 0x2eef0
leaq 0x4d8(%rsp), %rdi
callq 0xc09d0
leaq 0x4f8(%rsp), %rdi
callq 0xc09d0
leaq 0x518(%rsp), %rdi
callq 0xc09d0
leaq 0x548(%rsp), %rdi
callq 0xc09d0
leaq 0x568(%rsp), %rdi
callq 0xc09d0
addq $0x5b8, %rsp            # imm = 0x5B8
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0xf0(%rsp), %rdi
callq 0x2eef0
leaq 0x4d8(%rsp), %rdi
callq 0xc09d0
leaq 0x4f8(%rsp), %rdi
callq 0xc09d0
leaq 0x518(%rsp), %rdi
callq 0xc09d0
leaq 0x548(%rsp), %rdi
callq 0xc09d0
leaq 0x568(%rsp), %rdi
callq 0xc09d0
movq 0x540(%rsp), %rdi
callq 0xccf0
nopw %cs:(%rax,%rax)