// File: zeeev[P]DASVC/bamtools/src/toolkit/bamtools_split.cpp
// Function: bool BamTools::SplitTool::SplitToolPrivate::SplitTagImpl<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>(BamTools::BamAlignment&)
bool SplitTool::SplitToolPrivate::SplitTagImpl(BamAlignment& al) {
  
    typedef T TagValueType;
    typedef map<TagValueType, BamWriter*> WriterMap;
    typedef typename WriterMap::iterator WriterMapIterator;
  
    // set up splitting data structure
    WriterMap outputFiles;
    WriterMapIterator writerIter;

    // determine tag prefix
    string tagPrefix = SPLIT_TAG_TOKEN;
    if ( m_settings->HasCustomTagPrefix )
        tagPrefix = m_settings->CustomTagPrefix;

    // make sure prefix starts with '.'
    const size_t dotFound = tagPrefix.find('.');
    if ( dotFound != 0 )
        tagPrefix = string(".") + tagPrefix;

    // local variables
    const string tag = m_settings->TagToSplit;
    BamWriter* writer;
    stringstream outputFilenameStream("");
    TagValueType currentValue;
    
    // retrieve first alignment tag value
    if ( al.GetTag(tag, currentValue) ) {
      
        // open new BamWriter, save first alignment
        outputFilenameStream << m_outputFilenameStub << tagPrefix << tag << "_" << currentValue << ".bam";
        writer = new BamWriter;
        if ( !writer->Open(outputFilenameStream.str(), m_header, m_references) ) {
            cerr << "bamtools split ERROR: could not open " << outputFilenameStream.str()
                 << " for writing." << endl;
            return false;
        }
        writer->SaveAlignment(al);
        
        // store in map
        outputFiles.insert( make_pair(currentValue, writer) );
        
        // reset stream
        outputFilenameStream.str("");
    }
    
    // iterate through remaining alignments
    while ( m_reader.GetNextAlignment(al) ) {
      
        // skip if this alignment doesn't have TAG 
        if ( !al.GetTag(tag, currentValue) ) continue;
        
        // look up tag value in map
        writerIter = outputFiles.find(currentValue);
          
        // if no writer associated with this value
        if ( writerIter == outputFiles.end() ) {
        
            // open new BamWriter
            outputFilenameStream << m_outputFilenameStub << tagPrefix << tag << "_" << currentValue << ".bam";
            writer = new BamWriter;
            if ( !writer->Open(outputFilenameStream.str(), m_header, m_references) ) {
                cerr << "bamtool split ERROR: could not open " << outputFilenameStream.str()
                     << " for writing." << endl;
                return false;
            }

            // store in map
            outputFiles.insert( make_pair(currentValue, writer) );
            
            // reset stream
            outputFilenameStream.str("");
        } 
        
        // else grab corresponding writer
        else writer = (*writerIter).second;
        
        // store alignment in proper BAM output file 
        if ( writer ) 
            writer->SaveAlignment(al);
    }
    
    // clean up BamWriters  
    CloseWriters(outputFiles);
    
    // return success
    return true;  
}

// Assembly:
subq $0x5e8, %rsp            # imm = 0x5E8
movq %rdi, 0x5d8(%rsp)
movq %rsi, 0x5d0(%rsp)
movq 0x5d8(%rsp), %rax
movq %rax, 0x130(%rsp)
leaq 0x5a0(%rsp), %rdi
callq 0xfccc0
leaq 0x598(%rsp), %rdi
callq 0xfccd0
jmp 0xee113
leaq 0x783be(%rip), %rsi     # 0x1664d8
leaq 0x568(%rsp), %rdi
callq 0x86350
jmp 0xee129
movq 0x130(%rsp), %rax
movq (%rax), %rax
testb $0x1, 0x3(%rax)
je 0xee18c
movq 0x130(%rsp), %rax
movq (%rax), %rsi
addq $0x50, %rsi
leaq 0x568(%rsp), %rdi
callq 0x86070
jmp 0xee158
jmp 0xee18c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xeef0d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xeeefc
xorl %eax, %eax
movl %eax, %edx
leaq 0x568(%rsp), %rdi
movl $0x2e, %esi
callq 0x86960
movq %rax, 0x128(%rsp)
jmp 0xee1ac
movq 0x128(%rsp), %rax
movq %rax, 0x560(%rsp)
cmpq $0x0, 0x560(%rsp)
je 0xee2d5
leaq 0x51f(%rsp), %rdi
movq %rdi, 0x120(%rsp)
callq 0x86da0
movq 0x120(%rsp), %rdx
leaq 0x460f2(%rip), %rsi     # 0x1342e1
leaq 0x520(%rsp), %rdi
callq 0x86a00
jmp 0xee1fe
leaq 0x540(%rsp), %rdi
leaq 0x520(%rsp), %rsi
leaq 0x568(%rsp), %rdx
callq 0xd0140
jmp 0xee21d
leaq 0x568(%rsp), %rdi
leaq 0x540(%rsp), %rsi
callq 0x86070
jmp 0xee234
leaq 0x540(%rsp), %rdi
callq 0x86f68
jmp 0xee243
leaq 0x520(%rsp), %rdi
callq 0x86f68
jmp 0xee252
leaq 0x51f(%rsp), %rdi
callq 0x867b0
jmp 0xee2d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xee2c3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xee2b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x540(%rsp), %rdi
callq 0x86f68
jmp 0xee2b0
jmp 0xee2b2
leaq 0x520(%rsp), %rdi
callq 0x86f68
jmp 0xee2c1
jmp 0xee2c3
leaq 0x51f(%rsp), %rdi
callq 0x867b0
jmp 0xeeefc
movq 0x130(%rsp), %rax
movq (%rax), %rsi
addq $0x90, %rsi
leaq 0x4f8(%rsp), %rdi
callq 0x86350
jmp 0xee2f6
leaq 0x347(%rsp), %rdi
movq %rdi, 0x118(%rsp)
callq 0x86da0
movq 0x118(%rsp), %rdx
leaq 0x46959(%rip), %rsi     # 0x134c73
leaq 0x348(%rsp), %rdi
callq 0x86a00
jmp 0xee329
movl $0x10, %edi
movl $0x8, %esi
callq 0x928c0
movl %eax, %edx
leaq 0x368(%rsp), %rdi
leaq 0x348(%rsp), %rsi
callq 0x86be0
jmp 0xee351
leaq 0x348(%rsp), %rdi
callq 0x86f68
jmp 0xee360
leaq 0x347(%rsp), %rdi
callq 0x867b0
leaq 0x320(%rsp), %rdi
callq 0x86a30
jmp 0xee37c
movq 0x5d0(%rsp), %rdi
leaq 0x4f8(%rsp), %rsi
leaq 0x320(%rsp), %rdx
callq 0xbe2f0
movb %al, 0x117(%rsp)
jmp 0xee3a2
movb 0x117(%rsp), %al
testb $0x1, %al
jne 0xee3b2
jmp 0xee8c6
movq 0x130(%rsp), %rsi
leaq 0x378(%rsp), %rdi
addq $0x8, %rsi
callq 0x86640
movq %rax, 0x108(%rsp)
jmp 0xee3d5
movq 0x108(%rsp), %rdi
leaq 0x568(%rsp), %rsi
callq 0x86640
movq %rax, 0x100(%rsp)
jmp 0xee3f4
movq 0x100(%rsp), %rdi
leaq 0x4f8(%rsp), %rsi
callq 0x86640
movq %rax, 0xf8(%rsp)
jmp 0xee413
movq 0xf8(%rsp), %rdi
leaq 0x44a48(%rip), %rsi     # 0x132e6a
callq 0x86700
movq %rax, 0xf0(%rsp)
jmp 0xee431
movq 0xf0(%rsp), %rdi
leaq 0x320(%rsp), %rsi
callq 0x86640
movq %rax, 0xe8(%rsp)
jmp 0xee450
movq 0xe8(%rsp), %rdi
leaq 0x43ec0(%rip), %rsi     # 0x13231f
callq 0x86700
jmp 0xee466
movl $0x8, %edi
callq 0x86720
movq %rax, 0xe0(%rsp)
jmp 0xee47a
movq 0xe0(%rsp), %rdi
callq 0x863f0
jmp 0xee489
movq 0xe0(%rsp), %rax
movq %rax, 0x4f0(%rsp)
movq 0x4f0(%rsp), %rax
movq %rax, 0xd8(%rsp)
leaq 0x300(%rsp), %rdi
leaq 0x368(%rsp), %rsi
callq 0x866f0
jmp 0xee4c0
movq 0xd8(%rsp), %rdi
movq 0x130(%rsp), %rcx
movq %rcx, %rdx
addq $0x30, %rdx
addq $0x50, %rcx
leaq 0x300(%rsp), %rsi
callq 0x86bd0
movb %al, 0xd7(%rsp)
jmp 0xee4f1
movb 0xd7(%rsp), %al
xorb $0x1, %al
movb %al, 0xd6(%rsp)
leaq 0x300(%rsp), %rdi
callq 0x86f68
jmp 0xee510
movb 0xd6(%rsp), %al
testb $0x1, %al
jne 0xee520
jmp 0xee6c3
movq 0x76ab9(%rip), %rdi     # 0x164fe0
leaq 0x44a04(%rip), %rsi     # 0x132f32
callq 0x86700
movq %rax, 0xc8(%rsp)
jmp 0xee53d
leaq 0x2e0(%rsp), %rdi
leaq 0x368(%rsp), %rsi
callq 0x866f0
jmp 0xee554
movq 0xc8(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
callq 0x86640
movq %rax, 0xc0(%rsp)
jmp 0xee573
movq 0xc0(%rsp), %rdi
leaq 0x410c3(%rip), %rsi     # 0x12f645
callq 0x86700
movq %rax, 0xb8(%rsp)
jmp 0xee591
movq 0xb8(%rsp), %rdi
movq 0x769d0(%rip), %rsi     # 0x164f70
callq 0x86770
jmp 0xee5a7
leaq 0x2e0(%rsp), %rdi
callq 0x86f68
jmp 0xee5b6
movb $0x0, 0x5e7(%rsp)
movl $0x1, 0x2dc(%rsp)
jmp 0xeee59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xee609
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x348(%rsp), %rdi
callq 0x86f68
jmp 0xee607
jmp 0xee609
leaq 0x347(%rsp), %rdi
callq 0x867b0
jmp 0xeeecd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xeeead
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xeee77
movq 0xe0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
callq 0x866a0
jmp 0xeee77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x300(%rsp), %rdi
callq 0x86f68
jmp 0xee696
jmp 0xeee77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x2e0(%rsp), %rdi
callq 0x86f68
jmp 0xee6be
jmp 0xeee77
movq 0x4f0(%rsp), %rdi
movq 0x5d0(%rsp), %rsi
callq 0x86e80
jmp 0xee6da
leaq 0x268(%rsp), %rdi
leaq 0x320(%rsp), %rsi
callq 0x86350
jmp 0xee6f1
movq 0x4f0(%rsp), %rdx
leaq 0x288(%rsp), %rdi
leaq 0x268(%rsp), %rsi
callq 0xfcd40
jmp 0xee710
leaq 0x2b0(%rsp), %rdi
leaq 0x288(%rsp), %rsi
callq 0xfcd70
jmp 0xee727
leaq 0x5a0(%rsp), %rdi
leaq 0x2b0(%rsp), %rsi
callq 0xfccf0
movb %dl, 0xaf(%rsp)
movq %rax, 0xb0(%rsp)
jmp 0xee74d
movb 0xaf(%rsp), %al
movq 0xb0(%rsp), %rcx
movq %rcx, 0x258(%rsp)
movb %al, 0x260(%rsp)
leaq 0x2b0(%rsp), %rdi
callq 0xfcdb0
jmp 0xee77a
leaq 0x288(%rsp), %rdi
callq 0xfcdc0
jmp 0xee789
leaq 0x268(%rsp), %rdi
callq 0x86f68
jmp 0xee798
leaq 0x237(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x86da0
movq 0xa0(%rsp), %rdx
leaq 0x464b7(%rip), %rsi     # 0x134c73
leaq 0x238(%rsp), %rdi
callq 0x86a00
jmp 0xee7cb
leaq 0x368(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0x86850
jmp 0xee7e2
leaq 0x238(%rsp), %rdi
callq 0x86f68
jmp 0xee7f1
leaq 0x237(%rsp), %rdi
callq 0x867b0
jmp 0xee8c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xee865
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xee854
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x2b0(%rsp), %rdi
callq 0xfcdb0
jmp 0xee852
jmp 0xee854
leaq 0x288(%rsp), %rdi
callq 0xfcdc0
jmp 0xee863
jmp 0xee865
leaq 0x268(%rsp), %rdi
callq 0x86f68
jmp 0xee874
jmp 0xeee77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xee8b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x238(%rsp), %rdi
callq 0x86f68
jmp 0xee8b2
jmp 0xee8b4
leaq 0x237(%rsp), %rdi
callq 0x867b0
jmp 0xeee77
jmp 0xee8c8
movq 0x130(%rsp), %rdi
addq $0x28, %rdi
movq 0x5d0(%rsp), %rsi
callq 0x86bb0
movb %al, 0x9f(%rsp)
jmp 0xee8ea
movb 0x9f(%rsp), %al
testb $0x1, %al
jne 0xee8fa
jmp 0xeee2f
movq 0x5d0(%rsp), %rdi
leaq 0x4f8(%rsp), %rsi
leaq 0x320(%rsp), %rdx
callq 0xbe2f0
movb %al, 0x9e(%rsp)
jmp 0xee920
movb 0x9e(%rsp), %al
testb $0x1, %al
jne 0xee92f
jmp 0xee92d
jmp 0xee8c8
leaq 0x5a0(%rsp), %rdi
leaq 0x320(%rsp), %rsi
callq 0xfcdd0
movq %rax, 0x90(%rsp)
jmp 0xee94e
movq 0x90(%rsp), %rax
movq %rax, 0x228(%rsp)
movq 0x228(%rsp), %rax
movq %rax, 0x598(%rsp)
leaq 0x5a0(%rsp), %rdi
callq 0xfce20
movq %rax, 0x88(%rsp)
jmp 0xee985
movq 0x88(%rsp), %rax
movq %rax, 0x220(%rsp)
leaq 0x598(%rsp), %rdi
leaq 0x220(%rsp), %rsi
callq 0xfce00
movb %al, 0x87(%rsp)
jmp 0xee9b3
movb 0x87(%rsp), %al
testb $0x1, %al
jne 0xee9c3
jmp 0xeede1
movq 0x130(%rsp), %rsi
leaq 0x378(%rsp), %rdi
addq $0x8, %rsi
callq 0x86640
movq %rax, 0x78(%rsp)
jmp 0xee9e3
movq 0x78(%rsp), %rdi
leaq 0x568(%rsp), %rsi
callq 0x86640
movq %rax, 0x70(%rsp)
jmp 0xee9fc
movq 0x70(%rsp), %rdi
leaq 0x4f8(%rsp), %rsi
callq 0x86640
movq %rax, 0x68(%rsp)
jmp 0xeea15
movq 0x68(%rsp), %rdi
leaq 0x44449(%rip), %rsi     # 0x132e6a
callq 0x86700
movq %rax, 0x60(%rsp)
jmp 0xeea2d
movq 0x60(%rsp), %rdi
leaq 0x320(%rsp), %rsi
callq 0x86640
movq %rax, 0x58(%rsp)
jmp 0xeea46
movq 0x58(%rsp), %rdi
leaq 0x438cd(%rip), %rsi     # 0x13231f
callq 0x86700
jmp 0xeea59
movl $0x8, %edi
callq 0x86720
movq %rax, 0x50(%rsp)
jmp 0xeea6a
movq 0x50(%rsp), %rdi
callq 0x863f0
jmp 0xeea76
movq 0x50(%rsp), %rax
movq %rax, 0x4f0(%rsp)
movq 0x4f0(%rsp), %rax
movq %rax, 0x48(%rsp)
leaq 0x200(%rsp), %rdi
leaq 0x368(%rsp), %rsi
callq 0x866f0
jmp 0xeeaa7
movq 0x48(%rsp), %rdi
movq 0x130(%rsp), %rcx
movq %rcx, %rdx
addq $0x30, %rdx
addq $0x50, %rcx
leaq 0x200(%rsp), %rsi
callq 0x86bd0
movb %al, 0x47(%rsp)
jmp 0xeead2
movb 0x47(%rsp), %al
xorb $0x1, %al
movb %al, 0x46(%rsp)
leaq 0x200(%rsp), %rdi
callq 0x86f68
jmp 0xeeaeb
movb 0x46(%rsp), %al
testb $0x1, %al
jne 0xeeaf8
jmp 0xeec07
movq 0x764e1(%rip), %rdi     # 0x164fe0
leaq 0x44452(%rip), %rsi     # 0x132f58
callq 0x86700
movq %rax, 0x38(%rsp)
jmp 0xeeb12
leaq 0x1e0(%rsp), %rdi
leaq 0x368(%rsp), %rsi
callq 0x866f0
jmp 0xeeb29
movq 0x38(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x86640
movq %rax, 0x30(%rsp)
jmp 0xeeb42
movq 0x30(%rsp), %rdi
leaq 0x40af7(%rip), %rsi     # 0x12f645
callq 0x86700
movq %rax, 0x28(%rsp)
jmp 0xeeb5a
movq 0x28(%rsp), %rdi
movq 0x7640a(%rip), %rsi     # 0x164f70
callq 0x86770
jmp 0xeeb6d
leaq 0x1e0(%rsp), %rdi
callq 0x86f68
jmp 0xeeb7c
movb $0x0, 0x5e7(%rsp)
movl $0x1, 0x2dc(%rsp)
jmp 0xeee59
movq 0x50(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
callq 0x866a0
jmp 0xeee77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x200(%rsp), %rdi
callq 0x86f68
jmp 0xeebda
jmp 0xeee77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x1e0(%rsp), %rdi
callq 0x86f68
jmp 0xeec02
jmp 0xeee77
leaq 0x170(%rsp), %rdi
leaq 0x320(%rsp), %rsi
callq 0x86350
jmp 0xeec1e
movq 0x4f0(%rsp), %rdx
leaq 0x190(%rsp), %rdi
leaq 0x170(%rsp), %rsi
callq 0xfcd40
jmp 0xeec3d
leaq 0x1b8(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0xfcd70
jmp 0xeec54
leaq 0x5a0(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
callq 0xfccf0
movb %dl, 0x1f(%rsp)
movq %rax, 0x20(%rsp)
jmp 0xeec74
movb 0x1f(%rsp), %al
movq 0x20(%rsp), %rcx
movq %rcx, 0x160(%rsp)
movb %al, 0x168(%rsp)
leaq 0x1b8(%rsp), %rdi
callq 0xfcdb0
jmp 0xeec9b
leaq 0x190(%rsp), %rdi
callq 0xfcdc0
jmp 0xeecaa
leaq 0x170(%rsp), %rdi
callq 0x86f68
jmp 0xeecb9
leaq 0x13f(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x86da0
movq 0x10(%rsp), %rdx
leaq 0x45f9c(%rip), %rsi     # 0x134c73
leaq 0x140(%rsp), %rdi
callq 0x86a00
jmp 0xeece6
leaq 0x368(%rsp), %rdi
leaq 0x140(%rsp), %rsi
callq 0x86850
jmp 0xeecfd
leaq 0x140(%rsp), %rdi
callq 0x86f68
jmp 0xeed0c
leaq 0x13f(%rsp), %rdi
callq 0x867b0
jmp 0xeee06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xeed80
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xeed6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x1b8(%rsp), %rdi
callq 0xfcdb0
jmp 0xeed6d
jmp 0xeed6f
leaq 0x190(%rsp), %rdi
callq 0xfcdc0
jmp 0xeed7e
jmp 0xeed80
leaq 0x170(%rsp), %rdi
callq 0x86f68
jmp 0xeed8f
jmp 0xeee77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xeedcf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
leaq 0x140(%rsp), %rdi
callq 0x86f68
jmp 0xeedcd
jmp 0xeedcf
leaq 0x13f(%rsp), %rdi
callq 0x867b0
jmp 0xeee77
leaq 0x598(%rsp), %rdi
callq 0xfce50
movq %rax, 0x8(%rsp)
jmp 0xeedf5
movq 0x8(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, 0x4f0(%rsp)
cmpq $0x0, 0x4f0(%rsp)
je 0xeee2a
movq 0x4f0(%rsp), %rdi
movq 0x5d0(%rsp), %rsi
callq 0x86e80
jmp 0xeee28
jmp 0xeee2a
jmp 0xee8c8
movq 0x130(%rsp), %rdi
leaq 0x5a0(%rsp), %rsi
callq 0xfce70
jmp 0xeee46
movb $0x1, 0x5e7(%rsp)
movl $0x1, 0x2dc(%rsp)
leaq 0x320(%rsp), %rdi
callq 0x86f68
jmp 0xeee68
leaq 0x368(%rsp), %rdi
callq 0x86580
jmp 0xeee88
leaq 0x320(%rsp), %rdi
callq 0x86f68
jmp 0xeee86
jmp 0xeeead
leaq 0x4f8(%rsp), %rdi
callq 0x86f68
jmp 0xeeebe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x590(%rsp)
movl %eax, 0x58c(%rsp)
jmp 0xeeecd
leaq 0x368(%rsp), %rdi
callq 0x86580
jmp 0xeeebc
jmp 0xeeecd
leaq 0x568(%rsp), %rdi
callq 0x86f68
jmp 0xeeede
leaq 0x4f8(%rsp), %rdi
callq 0x86f68
jmp 0xeeedc
jmp 0xeeefc
leaq 0x5a0(%rsp), %rdi
callq 0xfcf50
movb 0x5e7(%rsp), %al
andb $0x1, %al
addq $0x5e8, %rsp            # imm = 0x5E8
retq
leaq 0x568(%rsp), %rdi
callq 0x86f68
jmp 0xeef0b
jmp 0xeef0d
leaq 0x5a0(%rsp), %rdi
callq 0xfcf50
jmp 0xeef1c
jmp 0xeef1e
movq 0x590(%rsp), %rdi
callq 0x86d80
movq %rax, %rdi
callq 0x91290
nopw %cs:(%rax,%rax)
nopl (%rax)