// File: /workspace/github_cpp_makefile_star2_O2/zeeev[P]DASVC/bamtools/src/toolkit/bamtools_random.cpp
// Function: BamTools::RandomTool::RandomTool()
RandomTool::RandomTool(void) 
    : AbstractTool()
    , m_settings(new RandomSettings)
    , m_impl(0)
{ 
    // set program details
    Options::SetProgramInfo("bamtools random", "grab a random subset of alignments",
                            "[-in <filename> -in <filename> ... | -list <filelist>] [-out <filename>] [-forceCompression] [-n] [-region <REGION>]");
    
    // set up options 
    OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
    Options::AddValueOption("-in",     "BAM filename", "the input BAM file",                         "", m_settings->HasInput,          m_settings->InputFiles,     IO_Opts, Options::StandardIn());
    Options::AddValueOption("-list",   "filename",     "the input BAM file list, one line per file", "", m_settings->HasInputFilelist,  m_settings->InputFilelist,  IO_Opts);
    Options::AddValueOption("-out",    "BAM filename", "the output BAM file",                        "", m_settings->HasOutput,         m_settings->OutputFilename, IO_Opts, Options::StandardOut());
    Options::AddValueOption("-region", "REGION",       "only pull random alignments from within this genomic region. Index file is recommended for better performance, and is used automatically if it exists. See \'bamtools help index\' for more details on creating one", "", m_settings->HasRegion, m_settings->Region, IO_Opts);
    Options::AddOption("-forceCompression", "if results are sent to stdout (like when piping to another tool), default behavior is to leave output uncompressed. Use this flag to override and force compression", m_settings->IsForceCompression, IO_Opts);
    
    OptionGroup* SettingsOpts = Options::CreateOptionGroup("Settings");
    Options::AddValueOption("-n", "count", "number of alignments to grab. Note - no duplicate checking is performed", "",
                            m_settings->HasAlignmentCount, m_settings->AlignmentCount, SettingsOpts, RANDOM_MAX_ALIGNMENT_COUNT);
    Options::AddValueOption("-seed", "unsigned integer", "random number generator seed (for repeatable results). Current time is used if no seed value is provided.", "",
                            m_settings->HasRandomNumberSeed, m_settings->RandomNumberSeed, SettingsOpts);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x90, %rsp
movq %rdi, %rbx
leaq 0x4725a(%rip), %rax     # 0x94a48
movq %rax, (%rdi)
movl $0x90, %edi
callq 0x355d0
movq %rax, %r14
movq %rax, %rdi
callq 0x4e07c
movq %r14, 0x8(%rbx)
andq $0x0, 0x10(%rbx)
leaq 0x25537(%rip), %rsi     # 0x72d4d
leaq 0x10(%rsp), %rdi
leaq 0x70(%rsp), %rdx
callq 0x35280
leaq 0x25531(%rip), %rsi     # 0x72d5d
leaq 0x30(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x35280
leaq 0x2553e(%rip), %rsi     # 0x72d80
leaq 0x50(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x35280
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x50(%rsp), %rdx
callq 0x65e80
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
leaq 0x23c91(%rip), %rsi     # 0x7151b
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x35280
leaq 0x10(%rsp), %rdi
callq 0x65402
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x35730
leaq 0x23c73(%rip), %rsi     # 0x7152a
leaq 0x10(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x35280
leaq 0x23c61(%rip), %rsi     # 0x7152e
leaq 0x30(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x35280
leaq 0x27ea1(%rip), %rsi     # 0x75784
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x35280
leaq 0x28efe(%rip), %rsi     # 0x767f7
leaq 0x70(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x35280
movq 0x8(%rbx), %r15
callq 0x65ebe
leaq 0x10(%r15), %r9
incq %r15
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x70(%rsp), %rcx
movq %r15, %r8
pushq %rax
pushq %r14
callq 0x3a3ce
popq %rax
popq %rcx
leaq 0x70(%rsp), %rdi
callq 0x35730
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
leaq 0x23be9(%rip), %rsi     # 0x71551
leaq 0x10(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x35280
leaq 0x23c92(%rip), %rsi     # 0x71610
leaq 0x30(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x35280
leaq 0x23bc3(%rip), %rsi     # 0x71557
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x35280
leaq 0x28e4d(%rip), %rsi     # 0x767f7
leaq 0x70(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x35280
movq 0x8(%rbx), %r9
leaq 0x2(%r9), %r8
addq $0x28, %r9
subq $0x8, %rsp
leaq 0x18(%rsp), %rdi
leaq 0x38(%rsp), %rsi
leaq 0x58(%rsp), %rdx
leaq 0x78(%rsp), %rcx
pushq %r14
callq 0x3a5fe
popq %rax
popq %rcx
leaq 0x70(%rsp), %rdi
callq 0x35730
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
leaq 0x23b6d(%rip), %rsi     # 0x71582
leaq 0x10(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x35280
leaq 0x23b03(%rip), %rsi     # 0x7152e
leaq 0x30(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x35280
leaq 0x23b46(%rip), %rsi     # 0x71587
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x35280
leaq 0x28da0(%rip), %rsi     # 0x767f7
leaq 0x70(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x35280
movq 0x8(%rbx), %r15
callq 0x65ec6
leaq 0x48(%r15), %r9
addq $0x3, %r15
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x70(%rsp), %rcx
movq %r15, %r8
pushq %rax
pushq %r14
callq 0x3a7ac
popq %rax
popq %rcx
leaq 0x70(%rsp), %rdi
callq 0x35730
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
leaq 0x23b1e(%rip), %rsi     # 0x715e5
leaq 0x10(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x35280
leaq 0x23b10(%rip), %rsi     # 0x715ed
leaq 0x30(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x35280
leaq 0x25302(%rip), %rsi     # 0x72df5
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x35280
leaq 0x28cee(%rip), %rsi     # 0x767f7
leaq 0x70(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x35280
movq 0x8(%rbx), %r9
leaq 0x5(%r9), %r8
addq $0x70, %r9
subq $0x8, %rsp
leaq 0x18(%rsp), %rdi
leaq 0x38(%rsp), %rsi
leaq 0x58(%rsp), %rdx
leaq 0x78(%rsp), %rcx
pushq %r14
callq 0x3a5fe
popq %rax
popq %rcx
leaq 0x70(%rsp), %rdi
callq 0x35730
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
leaq 0x24510(%rip), %rsi     # 0x72084
leaq 0x10(%rsp), %rdi
leaq 0x50(%rsp), %rdx
callq 0x35280
leaq 0x2444e(%rip), %rsi     # 0x71fd8
leaq 0x30(%rsp), %rdi
leaq 0x70(%rsp), %rdx
callq 0x35280
movq 0x8(%rbx), %rdx
addq $0x6, %rdx
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
movq %r14, %rcx
callq 0x652e4
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
leaq 0x27024(%rip), %rsi     # 0x74bf2
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x35280
leaq 0x10(%rsp), %rdi
callq 0x65402
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x35730
leaq 0x252cc(%rip), %rsi     # 0x72ec7
leaq 0x10(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x35280
leaq 0x23d53(%rip), %rsi     # 0x71964
leaq 0x30(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x35280
leaq 0x252a3(%rip), %rsi     # 0x72eca
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x35280
leaq 0x28bba(%rip), %rsi     # 0x767f7
leaq 0x70(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x35280
movq 0x8(%rbx), %r8
leaq 0x8(%r8), %r9
leaq 0x25329(%rip), %rax     # 0x72f84
leaq 0x10(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x70(%rsp), %rcx
pushq %rax
pushq %r14
callq 0x4e10e
popq %rax
popq %rcx
leaq 0x70(%rsp), %rdi
callq 0x35730
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
leaq 0x2526a(%rip), %rsi     # 0x72f12
leaq 0x10(%rsp), %rdi
leaq 0xd(%rsp), %rdx
callq 0x35280
leaq 0x289e4(%rip), %rsi     # 0x766a2
leaq 0x30(%rsp), %rdi
leaq 0xc(%rsp), %rdx
callq 0x35280
leaq 0x25244(%rip), %rsi     # 0x72f18
leaq 0x50(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x35280
leaq 0x28b0d(%rip), %rsi     # 0x767f7
leaq 0x70(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x35280
movq 0x8(%rbx), %r9
leaq 0x4(%r9), %r8
addq $0x68, %r9
subq $0x8, %rsp
leaq 0x18(%rsp), %rdi
leaq 0x38(%rsp), %rsi
leaq 0x58(%rsp), %rdx
leaq 0x78(%rsp), %rcx
pushq %r14
callq 0x4e2d4
popq %rax
popq %rcx
leaq 0x70(%rsp), %rdi
callq 0x35730
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
addq $0x90, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x35730
jmp 0x4de0d
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x35730
jmp 0x4de42
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x35730
jmp 0x4df69
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x35730
jmp 0x4de72
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x35730
jmp 0x4de93
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x35730
jmp 0x4df06
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x35730
jmp 0x4df69
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x35730
jmp 0x4df79
movq %rax, %rbx
movq %r14, %rdi
callq 0x35570
jmp 0x4df69
jmp 0x4df66
movq %rax, %rbx
jmp 0x4de21
movq %rax, %rbx
jmp 0x4de17
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
jmp 0x4df69
jmp 0x4df66
movq %rax, %rbx
jmp 0x4de56
movq %rax, %rbx
jmp 0x4de4c
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
jmp 0x4df69
jmp 0x4df66
jmp 0x4df66
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x35730
jmp 0x4df69
jmp 0x4df66
movq %rax, %rbx
jmp 0x4dea7
movq %rax, %rbx
jmp 0x4de9d
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
jmp 0x4df69
jmp 0x4df66
movq %rax, %rbx
jmp 0x4deeb
movq %rax, %rbx
jmp 0x4dee1
movq %rax, %rbx
jmp 0x4ded7
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x35730
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
jmp 0x4df69
jmp 0x4df66
movq %rax, %rbx
jmp 0x4df1a
movq %rax, %rbx
jmp 0x4df10
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
jmp 0x4df69
jmp 0x4df66
movq %rax, %rbx
jmp 0x4df58
movq %rax, %rbx
jmp 0x4df4e
movq %rax, %rbx
jmp 0x4df44
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x35730
leaq 0x50(%rsp), %rdi
callq 0x35730
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
jmp 0x4df69
jmp 0x4df66
movq %rax, %rbx
movq %rbx, %rdi
callq 0x35b50
movq %rax, %rbx
jmp 0x4df83
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x35730
leaq 0x10(%rsp), %rdi
callq 0x35730
jmp 0x4df69
movq %rax, %rdi
callq 0x3a198
nop