// File: millanek[P]evo/./process_vcf_annotation_tools.h
// Function: Annotation::loadAnnotationMap[abi:cxx11](std::basic_ifstream<char, std::char_traits<char>>*&, bool)
std::map<string, std::vector<std::vector<string> > > loadAnnotationMap(std::ifstream*& geneFile, const bool bUsePartial) {
        std::map<string, std::vector<std::vector<string> > > annotationMap;
        std::vector<std::vector<string> > annotation;
        string line;
        std::vector<string> currentTranscript;
        getline(*geneFile, line);
        currentTranscript.push_back(line);
        std::vector<string> annotLineVec = split(line, '\t');
        std::vector<string> findIfPartial = split(annotLineVec[4], '-');
        string currentScaffold = annotLineVec[0];
        bool bThisTranscriptPartial; string currentTranscriptName = getTranscriptName(annotLineVec[4], bThisTranscriptPartial);
        while (getline(*geneFile, line)) {
            std::vector<string> annotLineVec = split(line, '\t');
            bool bCurrentLinePartial = false; string currentLineTranscriptName = getTranscriptName(annotLineVec[4], bCurrentLinePartial);
            if (bCurrentLinePartial)
                bThisTranscriptPartial = true;
            if (annotLineVec[0] == currentScaffold) {
                if (currentLineTranscriptName == currentTranscriptName) {
                    currentTranscript.push_back(line);
                } else {
                    if (!bThisTranscriptPartial || bUsePartial)
                        annotation.push_back(currentTranscript);
                    currentTranscript.clear();
                    currentTranscript.push_back(line);
                    currentTranscriptName = currentLineTranscriptName;
                    bThisTranscriptPartial = bCurrentLinePartial;
                }
            } else {
                if (!bThisTranscriptPartial || bUsePartial)
                    annotation.push_back(currentTranscript);
                annotationMap[currentScaffold] = annotation;
                annotation.clear();
                currentTranscript.clear();
                currentTranscript.push_back(line);
                currentScaffold = annotLineVec[0];
                currentTranscriptName = currentLineTranscriptName;
                bThisTranscriptPartial = bCurrentLinePartial;
            }
        }
        return annotationMap;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x180, %rsp            # imm = 0x180
movq %rdi, -0x158(%rbp)
movb %cl, %al
movq %rdi, %rcx
movq %rcx, -0x150(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
andb $0x1, %al
movb %al, -0x19(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x148(%rbp)
movb $0x0, -0x1a(%rbp)
callq 0x3f5d0
leaq -0x38(%rbp), %rdi
callq 0x3f5f0
leaq -0x58(%rbp), %rdi
movq %rdi, -0x140(%rbp)
callq 0xa820
leaq -0x70(%rbp), %rdi
callq 0x48da0
movq -0x140(%rbp), %rsi
movq -0x18(%rbp), %rax
movq (%rax), %rdi
callq 0xa0d0
jmp 0x589da
leaq -0x70(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x48dc0
jmp 0x589e9
leaq -0x98(%rbp), %rdi
leaq -0x58(%rbp), %rsi
movl $0x9, %edx
callq 0x7bbe0
jmp 0x58a00
leaq -0x98(%rbp), %rdi
movl $0x4, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0xb0(%rbp), %rdi
movl $0x2d, %edx
callq 0x7bbe0
jmp 0x58a27
xorl %eax, %eax
movl %eax, %esi
leaq -0x98(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
leaq -0xd0(%rbp), %rdi
callq 0xa250
jmp 0x58a48
leaq -0x98(%rbp), %rdi
movl $0x4, %esi
callq 0x3d940
movq -0x148(%rbp), %rsi
movq %rax, %rdx
leaq -0xf8(%rbp), %rdi
leaq -0xd1(%rbp), %rcx
callq 0x590f0
jmp 0x58a78
jmp 0x58a7a
movq -0x18(%rbp), %rax
movq (%rax), %rdi
leaq -0x58(%rbp), %rsi
callq 0xa0d0
movq %rax, -0x160(%rbp)
jmp 0x58a93
movq -0x160(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0xa740
movb %al, -0x161(%rbp)
jmp 0x58ab1
movb -0x161(%rbp), %al
testb $0x1, %al
jne 0x58ac0
jmp 0x58d4a
leaq -0x110(%rbp), %rdi
leaq -0x58(%rbp), %rsi
movl $0x9, %edx
callq 0x7bbe0
jmp 0x58ad7
movb $0x0, -0x111(%rbp)
leaq -0x110(%rbp), %rdi
movl $0x4, %esi
callq 0x3d940
movq -0x148(%rbp), %rsi
movq %rax, %rdx
leaq -0x138(%rbp), %rdi
leaq -0x111(%rbp), %rcx
callq 0x590f0
jmp 0x58b0e
testb $0x1, -0x111(%rbp)
je 0x58b86
movb $0x1, -0xd1(%rbp)
jmp 0x58b86
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x58dd1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x58dc5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x58db9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x58dad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x58da1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x58d3c
leaq -0x110(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3d940
movq %rax, %rdi
leaq -0xd0(%rbp), %rsi
callq 0x39210
testb $0x1, %al
jne 0x58bae
jmp 0x58c62
leaq -0x138(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x39210
testb $0x1, %al
jne 0x58bc7
jmp 0x58bf8
leaq -0x70(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x48dc0
jmp 0x58bd6
jmp 0x58c5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x138(%rbp), %rdi
callq 0xac88
jmp 0x58d3c
testb $0x1, -0xd1(%rbp)
je 0x58c07
testb $0x1, -0x19(%rbp)
je 0x58c18
leaq -0x38(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x3f610
jmp 0x58c16
jmp 0x58c18
leaq -0x70(%rbp), %rdi
movq %rdi, -0x170(%rbp)
callq 0x591f0
movq -0x170(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x48dc0
jmp 0x58c3a
leaq -0xf8(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0xa060
jmp 0x58c4f
movb -0x111(%rbp), %al
andb $0x1, %al
movb %al, -0xd1(%rbp)
jmp 0x58d1f
testb $0x1, -0xd1(%rbp)
je 0x58c71
testb $0x1, -0x19(%rbp)
je 0x58c82
leaq -0x38(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x3f610
jmp 0x58c80
jmp 0x58c82
movq -0x158(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x3f760
movq %rax, -0x178(%rbp)
jmp 0x58c9e
movq -0x178(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x3f840
jmp 0x58cb0
leaq -0x38(%rbp), %rdi
callq 0x3fa90
leaq -0x70(%rbp), %rdi
movq %rdi, -0x180(%rbp)
callq 0x591f0
movq -0x180(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x48dc0
jmp 0x58cdb
xorl %eax, %eax
movl %eax, %esi
leaq -0x110(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
leaq -0xd0(%rbp), %rdi
callq 0xa060
jmp 0x58cfc
leaq -0xf8(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0xa060
jmp 0x58d11
movb -0x111(%rbp), %al
andb $0x1, %al
movb %al, -0xd1(%rbp)
leaq -0x138(%rbp), %rdi
callq 0xac88
leaq -0x110(%rbp), %rdi
callq 0x3dfa0
jmp 0x58a7a
leaq -0x110(%rbp), %rdi
callq 0x3dfa0
jmp 0x58da1
movb $0x1, -0x1a(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0xac88
leaq -0xd0(%rbp), %rdi
callq 0xac88
leaq -0xb0(%rbp), %rdi
callq 0x3dfa0
leaq -0x98(%rbp), %rdi
callq 0x3dfa0
leaq -0x70(%rbp), %rdi
callq 0x3dfa0
leaq -0x58(%rbp), %rdi
callq 0xac88
leaq -0x38(%rbp), %rdi
callq 0x3ec50
testb $0x1, -0x1a(%rbp)
jne 0x58e06
jmp 0x58dfa
leaq -0xf8(%rbp), %rdi
callq 0xac88
leaq -0xd0(%rbp), %rdi
callq 0xac88
leaq -0xb0(%rbp), %rdi
callq 0x3dfa0
leaq -0x98(%rbp), %rdi
callq 0x3dfa0
leaq -0x70(%rbp), %rdi
callq 0x3dfa0
leaq -0x58(%rbp), %rdi
callq 0xac88
leaq -0x38(%rbp), %rdi
callq 0x3ec50
movq -0x158(%rbp), %rdi
callq 0x3f5b0
jmp 0x58e16
movq -0x158(%rbp), %rdi
callq 0x3f5b0
movq -0x150(%rbp), %rax
addq $0x180, %rsp            # imm = 0x180
popq %rbp
retq
movq -0x78(%rbp), %rdi
callq 0xab50
nop