// File: /workspace/github_cpp_makefile_star2_O3/adamiaonr[P]rid-analytics/src/run-analysis.cpp
// Function: create_argv_parser()
ArgvParser * create_argv_parser() {

    ArgvParser * cmds = new ArgvParser();

    cmds->setIntroductoryDescription("\n\nrid-analytics v2.0\n\na tool to \
analyze the behavior of Bloom-filter based forwarding networks. it computes the \
probability of different delivery states for all possible request paths in a \
network topology passed as input.\nby adamiaonr@cmu.edu");

    cmds->setHelpOption("h", "help", "help page.");

    cmds->defineOption(
            OPTION_SCN_FILE,
            "path to .scn file with scenario info for analysis",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_DATA_DIR,
            "path to directory on which to save .csv files w/ results",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_OUTPUT_LABEL,
            "label to add to output .tsv files (will be created in <data-dir>)",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_BF_SIZE,
            "size of Bloom filter (in bits)",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_REQUEST_SIZE,
            "size of request, in # of URL components",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_MM_MODE,
            "multiple match resolution mode. 0 for 'flood' (aka 'AML'), 1 for 'random' (RML), 2/3 for 'hard/soft fallback'. default is 'flood'.",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_RESOLV_MODE,
            "enable/disable incorrect delivery resolution. 0 for 'off', 1 for 'on'. default is 'off'.",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_ORIGIN_SERVER,
            "id of origin server. default is '1'.",
            ArgvParser::OptionRequiresValue);

    cmds->defineOption(
            OPTION_START_ROUTER,
            "id of starting router. default is '0'.",
            ArgvParser::OptionRequiresValue);

    // cmds->defineOption(
    //         OPTION_VERBOSE,
    //         "print stats during the model run. default: not verbose",
    //         ArgvParser::NoOptionAttribute);
    // cmds->defineOptionAlternative(OPTION_VERBOSE, "v");

    return cmds;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x60, %rsp
movl $0x158, %edi            # imm = 0x158
callq 0x4390
movq %rax, %rbx
movq %rax, %rdi
callq 0x1f180
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x172f6(%rip), %rsi     # 0x2ff80
leaq 0x173e2(%rip), %rdx     # 0x30073
movq %rsp, %rdi
callq 0x18bc0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x21546
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x18cba
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x1409e(%rip), %rsi     # 0x2cd65
leaq 0x14098(%rip), %rdx     # 0x2cd66
callq 0x18bc0
leaq 0x30(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x17390(%rip), %rsi     # 0x30074
leaq 0x1738d(%rip), %rdx     # 0x30078
leaq 0x20(%rsp), %rdi
callq 0x18bc0
leaq 0x50(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x17374(%rip), %rsi     # 0x30079
leaq 0x17377(%rip), %rdx     # 0x30083
leaq 0x40(%rsp), %rdi
callq 0x18bc0
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
leaq 0x40(%rsp), %rcx
movq %rbx, %rdi
callq 0x21458
movq 0x40(%rsp), %rdi
cmpq %r13, %rdi
je 0x18d42
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x18d59
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x18d6f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x17308(%rip), %rsi     # 0x30084
leaq 0x17309(%rip), %rdx     # 0x3008c
callq 0x18bc0
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x172f6(%rip), %rsi     # 0x3008d
leaq 0x17320(%rip), %rdx     # 0x300be
callq 0x18bc0
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x2127c
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x18dcf
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x18de5
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x172cd(%rip), %rsi     # 0x300bf
leaq 0x172ce(%rip), %rdx     # 0x300c7
callq 0x18bc0
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x172bb(%rip), %rsi     # 0x300c8
leaq 0x172ec(%rip), %rdx     # 0x30100
callq 0x18bc0
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x2127c
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x18e45
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x18e5b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x17299(%rip), %rsi     # 0x30101
leaq 0x1729e(%rip), %rdx     # 0x3010d
callq 0x18bc0
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1728b(%rip), %rsi     # 0x3010e
leaq 0x172c5(%rip), %rdx     # 0x3014f
callq 0x18bc0
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x2127c
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x18ebb
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x18ed1
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x17272(%rip), %rsi     # 0x30150
leaq 0x17272(%rip), %rdx     # 0x30157
callq 0x18bc0
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1725f(%rip), %rsi     # 0x30158
leaq 0x17276(%rip), %rdx     # 0x30176
callq 0x18bc0
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x2127c
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x18f31
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x18f47
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x17223(%rip), %rsi     # 0x30177
leaq 0x17228(%rip), %rdx     # 0x30183
callq 0x18bc0
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x17215(%rip), %rsi     # 0x30184
leaq 0x17235(%rip), %rdx     # 0x301ab
callq 0x18bc0
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x2127c
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x18fa7
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x18fbd
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x171e2(%rip), %rsi     # 0x301ac
leaq 0x171e2(%rip), %rdx     # 0x301b3
callq 0x18bc0
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x171cf(%rip), %rsi     # 0x301b4
leaq 0x1724a(%rip), %rdx     # 0x30236
callq 0x18bc0
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x2127c
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x1901d
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x19033
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x171f7(%rip), %rsi     # 0x30237
leaq 0x171ff(%rip), %rdx     # 0x30246
callq 0x18bc0
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x171ec(%rip), %rsi     # 0x30247
leaq 0x1723d(%rip), %rdx     # 0x3029f
callq 0x18bc0
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x2127c
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x19093
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x190a9
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x171ea(%rip), %rsi     # 0x302a0
leaq 0x171f0(%rip), %rdx     # 0x302ad
callq 0x18bc0
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x171dd(%rip), %rsi     # 0x302ae
leaq 0x171fa(%rip), %rdx     # 0x302d2
callq 0x18bc0
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x2127c
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x19109
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x1911f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x171a7(%rip), %rsi     # 0x302d3
leaq 0x171ac(%rip), %rdx     # 0x302df
callq 0x18bc0
leaq 0x20(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x17199(%rip), %rsi     # 0x302e0
leaq 0x171b8(%rip), %rdx     # 0x30306
callq 0x18bc0
movq %rsp, %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
movl $0x1, %ecx
callq 0x2127c
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x1917f
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x19195
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rbx, %rax
addq $0x60, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
jmp 0x191fe
jmp 0x1921e
jmp 0x19239
jmp 0x191fe
jmp 0x1921e
jmp 0x19239
jmp 0x191fe
jmp 0x1921e
jmp 0x19239
jmp 0x191fe
jmp 0x1921e
jmp 0x19239
jmp 0x191fe
jmp 0x1921e
jmp 0x19239
jmp 0x191fe
jmp 0x1921e
jmp 0x19239
jmp 0x191fe
jmp 0x1921e
jmp 0x19239
jmp 0x191fe
jmp 0x1921e
jmp 0x19239
jmp 0x191fe
jmp 0x1921e
jmp 0x19239
movq %rax, %r14
movq 0x40(%rsp), %rdi
cmpq %r13, %rdi
je 0x19201
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x19201
movq %rax, %r14
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
je 0x19221
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x19221
jmp 0x1921e
jmp 0x19239
movq %rax, %r14
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x1923c
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x1923c
movq %rax, %r14
movq %r14, %rdi
callq 0x4700
movq %rax, %r14
movl $0x158, %esi            # imm = 0x158
movq %rbx, %rdi
jmp 0x19232