// File: zeeev[P]DASVC/bamtools/src/toolkit/bamtools_coverage.cpp
// Function: BamTools::CoverageTool::CoverageTool()
CoverageTool::CoverageTool(void) 
    : AbstractTool()
    , m_settings(new CoverageSettings)
    , m_impl(0)
{ 
    // set program details
    Options::SetProgramInfo("bamtools coverage", "prints coverage data for a single BAM file", "[-in <filename>] [-out <filename>]");
    
    // set up options 
    OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
    Options::AddValueOption("-in",  "BAM filename", "the input BAM file", "", m_settings->HasInputFile,  m_settings->InputBamFilename, IO_Opts, Options::StandardIn());
    Options::AddValueOption("-out", "filename",     "the output file",    "", m_settings->HasOutputFile, m_settings->OutputFilename,   IO_Opts, Options::StandardOut());
}

// Assembly:
subq $0x2d8, %rsp            # imm = 0x2D8
movq %rdi, 0x2d0(%rsp)
movq 0x2d0(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0x91a20
movq 0xc0(%rsp), %rax
leaq 0xcb66d(%rip), %rcx     # 0x164740
movq %rcx, (%rax)
addq $0x8, %rax
movq %rax, 0xc8(%rsp)
movl $0x48, %edi
callq 0x86720
movq %rax, 0xd0(%rsp)
jmp 0x990f6
movq 0xd0(%rsp), %rdi
callq 0x99be0
jmp 0x99105
movq 0xc0(%rsp), %rax
movq 0xc8(%rsp), %rcx
movq 0xd0(%rsp), %rdx
movq %rdx, (%rcx)
movq $0x0, 0x10(%rax)
leaq 0x29f(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x86da0
movq 0xb8(%rsp), %rdx
leaq 0x95a5b(%rip), %rsi     # 0x12eba7
leaq 0x2a0(%rsp), %rdi
callq 0x86a00
jmp 0x9915b
leaq 0x277(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0x86da0
movq 0xb0(%rsp), %rdx
leaq 0x95a3a(%rip), %rsi     # 0x12ebb9
leaq 0x278(%rsp), %rdi
callq 0x86a00
jmp 0x9918e
leaq 0x24f(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0x86da0
movq 0xa8(%rsp), %rdx
leaq 0x95a32(%rip), %rsi     # 0x12ebe4
leaq 0x250(%rsp), %rdi
callq 0x86a00
jmp 0x991c1
leaq 0x2a0(%rsp), %rdi
leaq 0x278(%rsp), %rsi
leaq 0x250(%rsp), %rdx
callq 0x10f230
jmp 0x991e0
leaq 0x250(%rsp), %rdi
callq 0x86f68
jmp 0x991ef
leaq 0x24f(%rsp), %rdi
callq 0x867b0
leaq 0x278(%rsp), %rdi
callq 0x86f68
jmp 0x9920b
leaq 0x277(%rsp), %rdi
callq 0x867b0
leaq 0x2a0(%rsp), %rdi
callq 0x86f68
jmp 0x99227
leaq 0x29f(%rsp), %rdi
callq 0x867b0
leaq 0x21f(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x86da0
movq 0xa0(%rsp), %rdx
leaq 0x95413(%rip), %rsi     # 0x12e66b
leaq 0x220(%rsp), %rdi
callq 0x86a00
jmp 0x99267
leaq 0x220(%rsp), %rdi
callq 0x10d3e0
movq %rax, 0x98(%rsp)
jmp 0x9927e
leaq 0x220(%rsp), %rdi
callq 0x86f68
jmp 0x9928d
leaq 0x21f(%rsp), %rdi
callq 0x867b0
movq 0x98(%rsp), %rax
movq %rax, 0x240(%rsp)
leaq 0x1f7(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x86da0
movq 0x90(%rsp), %rdx
leaq 0x953ac(%rip), %rsi     # 0x12e67a
leaq 0x1f8(%rsp), %rdi
callq 0x86a00
jmp 0x992dd
leaq 0x1cf(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x86da0
movq 0x88(%rsp), %rdx
leaq 0x9537d(%rip), %rsi     # 0x12e67e
leaq 0x1d0(%rsp), %rdi
callq 0x86a00
jmp 0x99310
leaq 0x1a7(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x86da0
movq 0x80(%rsp), %rdx
leaq 0x9a600(%rip), %rsi     # 0x133934
leaq 0x1a8(%rsp), %rdi
callq 0x86a00
jmp 0x99343
leaq 0x17f(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0x86da0
movq 0x78(%rsp), %rdx
leaq 0x9b912(%rip), %rsi     # 0x134c73
leaq 0x180(%rsp), %rdi
callq 0x86a00
jmp 0x99370
movq 0xc0(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x58(%rsp)
addq $0x8, %rax
movq %rax, 0x60(%rsp)
movq 0x240(%rsp), %rax
movq %rax, 0x68(%rsp)
callq 0x10f280
movq %rax, 0x70(%rsp)
jmp 0x993a3
movq 0x60(%rsp), %r9
movq 0x58(%rsp), %r8
movq 0x68(%rsp), %rcx
movq 0x70(%rsp), %rdx
movq %rsp, %rax
movq %rdx, 0x8(%rax)
movq %rcx, (%rax)
leaq 0x1f8(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
leaq 0x1a8(%rsp), %rdx
leaq 0x180(%rsp), %rcx
callq 0x92150
jmp 0x993e8
leaq 0x180(%rsp), %rdi
callq 0x86f68
jmp 0x993f7
leaq 0x17f(%rsp), %rdi
callq 0x867b0
leaq 0x1a8(%rsp), %rdi
callq 0x86f68
jmp 0x99413
leaq 0x1a7(%rsp), %rdi
callq 0x867b0
leaq 0x1d0(%rsp), %rdi
callq 0x86f68
jmp 0x9942f
leaq 0x1cf(%rsp), %rdi
callq 0x867b0
leaq 0x1f8(%rsp), %rdi
callq 0x86f68
jmp 0x9944b
leaq 0x1f7(%rsp), %rdi
callq 0x867b0
leaq 0x157(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x86da0
movq 0x50(%rsp), %rdx
leaq 0x9525c(%rip), %rsi     # 0x12e6d2
leaq 0x158(%rsp), %rdi
callq 0x86a00
jmp 0x99485
leaq 0x12f(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x86da0
movq 0x48(%rsp), %rdx
leaq 0x952bd(%rip), %rsi     # 0x12e760
leaq 0x130(%rsp), %rdi
callq 0x86a00
jmp 0x994b2
leaq 0x107(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x86da0
movq 0x40(%rsp), %rdx
leaq 0x95737(%rip), %rsi     # 0x12ec07
leaq 0x108(%rsp), %rdi
callq 0x86a00
jmp 0x994df
leaq 0xdf(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0x86da0
movq 0x38(%rsp), %rdx
leaq 0x9b776(%rip), %rsi     # 0x134c73
leaq 0xe0(%rsp), %rdi
callq 0x86a00
jmp 0x9950c
movq 0xc0(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, %rcx
incq %rcx
movq %rcx, 0x18(%rsp)
addq $0x28, %rax
movq %rax, 0x20(%rsp)
movq 0x240(%rsp), %rax
movq %rax, 0x28(%rsp)
callq 0x10f290
movq %rax, 0x30(%rsp)
jmp 0x99545
movq 0x20(%rsp), %r9
movq 0x18(%rsp), %r8
movq 0x28(%rsp), %rcx
movq 0x30(%rsp), %rdx
movq %rsp, %rax
movq %rdx, 0x8(%rax)
movq %rcx, (%rax)
leaq 0x158(%rsp), %rdi
leaq 0x130(%rsp), %rsi
leaq 0x108(%rsp), %rdx
leaq 0xe0(%rsp), %rcx
callq 0x92150
jmp 0x9958a
leaq 0xe0(%rsp), %rdi
callq 0x86f68
jmp 0x99599
leaq 0xdf(%rsp), %rdi
callq 0x867b0
leaq 0x108(%rsp), %rdi
callq 0x86f68
jmp 0x995b5
leaq 0x107(%rsp), %rdi
callq 0x867b0
leaq 0x130(%rsp), %rdi
callq 0x86f68
jmp 0x995d1
leaq 0x12f(%rsp), %rdi
callq 0x867b0
leaq 0x158(%rsp), %rdi
callq 0x86f68
jmp 0x995ed
leaq 0x157(%rsp), %rdi
callq 0x867b0
addq $0x2d8, %rsp            # imm = 0x2D8
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x9991f
movq 0xd0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
callq 0x866a0
jmp 0x9991f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x996e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x996c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x996ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x86f68
jmp 0x996a9
jmp 0x996ab
leaq 0x24f(%rsp), %rdi
callq 0x867b0
leaq 0x278(%rsp), %rdi
callq 0x86f68
jmp 0x996c7
jmp 0x996c9
leaq 0x277(%rsp), %rdi
callq 0x867b0
leaq 0x2a0(%rsp), %rdi
callq 0x86f68
jmp 0x996e5
jmp 0x996e7
leaq 0x29f(%rsp), %rdi
callq 0x867b0
jmp 0x9991f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x99734
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
leaq 0x220(%rsp), %rdi
callq 0x86f68
jmp 0x99732
jmp 0x99734
leaq 0x21f(%rsp), %rdi
callq 0x867b0
jmp 0x9991f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x99823
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x99805
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x997e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x997c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
leaq 0x180(%rsp), %rdi
callq 0x86f68
jmp 0x997c7
jmp 0x997c9
leaq 0x17f(%rsp), %rdi
callq 0x867b0
leaq 0x1a8(%rsp), %rdi
callq 0x86f68
jmp 0x997e5
jmp 0x997e7
leaq 0x1a7(%rsp), %rdi
callq 0x867b0
leaq 0x1d0(%rsp), %rdi
callq 0x86f68
jmp 0x99803
jmp 0x99805
leaq 0x1cf(%rsp), %rdi
callq 0x867b0
leaq 0x1f8(%rsp), %rdi
callq 0x86f68
jmp 0x99821
jmp 0x99823
leaq 0x1f7(%rsp), %rdi
callq 0x867b0
jmp 0x9991f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x99912
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x998f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x998d6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
jmp 0x998b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2c8(%rsp)
movl %eax, 0x2c4(%rsp)
leaq 0xe0(%rsp), %rdi
callq 0x86f68
jmp 0x998b6
jmp 0x998b8
leaq 0xdf(%rsp), %rdi
callq 0x867b0
leaq 0x108(%rsp), %rdi
callq 0x86f68
jmp 0x998d4
jmp 0x998d6
leaq 0x107(%rsp), %rdi
callq 0x867b0
leaq 0x130(%rsp), %rdi
callq 0x86f68
jmp 0x998f2
jmp 0x998f4
leaq 0x12f(%rsp), %rdi
callq 0x867b0
leaq 0x158(%rsp), %rdi
callq 0x86f68
jmp 0x99910
jmp 0x99912
leaq 0x157(%rsp), %rdi
callq 0x867b0
movq 0xc0(%rsp), %rdi
callq 0x92a20
jmp 0x9992e
jmp 0x99930
movq 0x2c8(%rsp), %rdi
callq 0x86d80
movq %rax, %rdi
callq 0x91290
nopw %cs:(%rax,%rax)