// File: /workspace/github_cpp_makefile_star2_O2/aalto-speech[P]ftk/src/counts.cc
// Function: main
int main(int argc, char* argv[]) {

    conf::Config config;
    config("usage: counts [OPTION...] INPUT COUNTS1 COUNTS2\n")
      ('h', "help", "", "", "display help")
      ('v', "vocabulary=FILE", "arg", "", "Unigram model file")
      ('t', "transitions=FILE", "arg", "", "Bigram model file")
      ('f', "forward-backward", "", "", "Use Forward-backward segmentation instead of Viterbi")
      ('w', "weights", "", "", "Training examples are weighted")
      ('8', "utf-8", "", "", "Utf-8 character encoding in use");
    config.default_parse(argc, argv);
    if (config.arguments.size() != 3) config.print_help(stderr, 1);

    if (!config["vocabulary"].specified && !config["transitions"].specified) {
        cerr << "Please define vocabulary or transitions" << endl;
        exit(EXIT_FAILURE);
    }

    if (config["vocabulary"].specified && config["transitions"].specified) {
        cerr << "Please don't define both vocabulary and transitions" << endl;
        exit(EXIT_FAILURE);
    }

    string vocab_fname;
    string trans_fname;
    int maxlen;
    map<string, flt_type> vocab;
    StringSet *ss_vocab = NULL;
    transitions_t transitions;
    bool unigram = true;
    flt_type one_char_min_lp = -25.0;
    string in_fname = config.arguments[0];
    string out_fname_1 = config.arguments[1];
    string out_fname_2 = config.arguments[2];
    bool enable_forward_backward = config["forward-backward"].specified;
    bool weights = config["weights"].specified;
    bool utf8_encoding = config["utf-8"].specified;

    if (config["vocabulary"].specified) {
        vocab_fname = config["vocabulary"].get_str();
        cerr << "Reading vocabulary " << vocab_fname << endl;
        int retval = Unigrams::read_vocab(vocab_fname, vocab, maxlen, utf8_encoding);
        vocab[start_end_symbol] = 0.0;
        if (retval < 0) {
            cerr << "something went wrong reading vocabulary" << endl;
            exit(EXIT_FAILURE);
        }
        cerr << "\t" << "size: " << vocab.size() << endl;
        cerr << "\t" << "maximum string length: " << maxlen << endl;
        ss_vocab = new StringSet(vocab);
    }

    if (config["transitions"].specified) {
        unigram = false;
        trans_fname = config["vocabulary"].get_str();
        cerr << "Reading transitions " << trans_fname << endl;
        int retval = Bigrams::read_transitions(transitions, trans_fname);
        Bigrams::trans_to_vocab(transitions, vocab);
        ss_vocab = new StringSet(vocab);
        if (retval < 0) {
            cerr << "something went wrong reading transitions" << endl;
            exit(EXIT_FAILURE);
        }
        cerr << "\t" << "vocabulary: " << transitions.size() << endl;
        cerr << "\t" << "transitions: " << retval << endl;
    }

    cerr << "Segmenting corpus" << endl;
    SimpleFileInput infile(in_fname);

    map<string, flt_type> unigram_stats;
    transitions_t trans_stats;
    string line;
    int li = 1;
    while (infile.getline(line)) {

        if (li % 100000 == 0) cerr << "processing line number: " << li << endl;

        trim(line, '\n');

        flt_type curr_weight = 1.0;
        if (weights) {
            string remainder;
            std::istringstream iss(line);
            iss >> std::skipws >> curr_weight;
            getline(iss, remainder);
            trim(remainder, '\t'); trim(remainder,' ');
            line.assign(remainder);
        }

        for (unsigned int i=0; i<line.size(); i++) {
            string currchr {line[i]};
            if (!ss_vocab->includes(currchr))
                ss_vocab->add(currchr, one_char_min_lp);
        }

        transitions_t curr_stats;

        if (unigram)
            if (enable_forward_backward) {
                FactorGraph fg(line, start_end_symbol, *ss_vocab);
                forward_backward(vocab, fg, curr_stats);
            }
            else {
                viterbi(vocab, line, curr_stats, start_end_symbol);
            }
        else {
            FactorGraph fg(line, start_end_symbol, *ss_vocab);
            if (enable_forward_backward)
                forward_backward(transitions, fg, curr_stats);
            else
                viterbi(transitions, fg, curr_stats);
        }

        Bigrams::update_trans_stats(curr_stats, curr_weight,
                                    trans_stats, unigram_stats);

        li++;
    }

    if (ss_vocab != NULL) delete ss_vocab;

    Unigrams::write_vocab(out_fname_1, unigram_stats, true, 10);
    Bigrams::write_transitions(trans_stats, out_fname_2, true, 10);

    exit(EXIT_SUCCESS);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x8f8, %rsp            # imm = 0x8F8
movq %rsi, %rbx
movl %edi, %r14d
leaq -0x738(%rbp), %rdi
callq 0x6edc
leaq 0x1f4e1(%rip), %rsi     # 0x2401a
leaq -0x680(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x680(%rbp), %rsi
callq 0x6f48
movq %rax, %r15
leaq 0x1f4ea(%rip), %rsi     # 0x24053
leaq -0x660(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x4140
leaq 0x1fa34(%rip), %rsi     # 0x245b7
leaq -0x640(%rbp), %rdi
leaq -0x140(%rbp), %rdx
callq 0x4140
leaq 0x1fa1a(%rip), %rsi     # 0x245b7
leaq -0x620(%rbp), %rdi
leaq -0x798(%rbp), %rdx
callq 0x4140
leaq 0x1f494(%rip), %rsi     # 0x2404b
leaq -0x600(%rbp), %rdi
leaq -0x768(%rbp), %rdx
callq 0x4140
pushq $0x68
popq %rsi
leaq -0x660(%rbp), %rdx
leaq -0x640(%rbp), %rcx
leaq -0x620(%rbp), %r8
leaq -0x600(%rbp), %r9
movq %r15, %rdi
callq 0x6f60
movq %rax, %r15
leaq 0x1f45d(%rip), %rsi     # 0x24058
leaq -0x5e0(%rbp), %rdi
leaq -0x70(%rbp), %rdx
callq 0x4140
leaq 0x1f456(%rip), %rsi     # 0x24068
leaq -0x5c0(%rbp), %rdi
leaq -0x110(%rbp), %rdx
callq 0x4140
leaq 0x1f98b(%rip), %rsi     # 0x245b7
leaq -0x5a0(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
callq 0x4140
leaq 0x1f426(%rip), %rsi     # 0x2406c
leaq -0x580(%rbp), %rdi
leaq -0x320(%rbp), %rdx
callq 0x4140
pushq $0x76
popq %rsi
leaq -0x5e0(%rbp), %rdx
leaq -0x5c0(%rbp), %rcx
leaq -0x5a0(%rbp), %r8
leaq -0x580(%rbp), %r9
movq %r15, %rdi
callq 0x6f60
movq %rax, %r15
leaq 0x1f3f5(%rip), %rsi     # 0x2407f
leaq -0x560(%rbp), %rdi
leaq -0x300(%rbp), %rdx
callq 0x4140
leaq 0x1f3c4(%rip), %rsi     # 0x24068
leaq -0x540(%rbp), %rdi
leaq -0x2e0(%rbp), %rdx
callq 0x4140
leaq 0x1f8f9(%rip), %rsi     # 0x245b7
leaq -0x520(%rbp), %rdi
leaq -0xa0(%rbp), %rdx
callq 0x4140
leaq 0x1f3b8(%rip), %rsi     # 0x24090
leaq -0x500(%rbp), %rdi
leaq -0x80(%rbp), %rdx
callq 0x4140
pushq $0x74
popq %rsi
leaq -0x560(%rbp), %rdx
leaq -0x540(%rbp), %rcx
leaq -0x520(%rbp), %r8
leaq -0x500(%rbp), %r9
movq %r15, %rdi
callq 0x6f60
movq %rax, %r15
leaq 0x1f389(%rip), %rsi     # 0x240a2
leaq -0x4e0(%rbp), %rdi
leaq -0x78(%rbp), %rdx
callq 0x4140
leaq 0x1f887(%rip), %rsi     # 0x245b7
leaq -0x4c0(%rbp), %rdi
leaq -0x3c(%rbp), %rdx
callq 0x4140
leaq 0x1f870(%rip), %rsi     # 0x245b7
leaq -0x4a0(%rbp), %rdi
leaq -0x35(%rbp), %rdx
callq 0x4140
leaq 0x1f355(%rip), %rsi     # 0x240b3
leaq -0x480(%rbp), %rdi
leaq -0x34(%rbp), %rdx
callq 0x4140
pushq $0x66
popq %rsi
leaq -0x4e0(%rbp), %rdx
leaq -0x4c0(%rbp), %rcx
leaq -0x4a0(%rbp), %r8
leaq -0x480(%rbp), %r9
movq %r15, %rdi
callq 0x6f60
movq %rax, %r15
leaq 0x1f349(%rip), %rsi     # 0x240e8
leaq -0x460(%rbp), %rdi
leaq -0x33(%rbp), %rdx
callq 0x4140
leaq 0x1f801(%rip), %rsi     # 0x245b7
leaq -0x440(%rbp), %rdi
leaq -0x32(%rbp), %rdx
callq 0x4140
leaq 0x1f7ea(%rip), %rsi     # 0x245b7
leaq -0x420(%rbp), %rdi
leaq -0x31(%rbp), %rdx
callq 0x4140
leaq 0x1f30c(%rip), %rsi     # 0x240f0
leaq -0x400(%rbp), %rdi
leaq -0x30(%rbp), %rdx
callq 0x4140
pushq $0x77
popq %rsi
leaq -0x460(%rbp), %rdx
leaq -0x440(%rbp), %rcx
leaq -0x420(%rbp), %r8
leaq -0x400(%rbp), %r9
movq %r15, %rdi
callq 0x6f60
movq %rax, %r15
leaq 0x1f2ea(%rip), %rsi     # 0x2410f
leaq -0x3e0(%rbp), %rdi
leaq -0x2f(%rbp), %rdx
callq 0x4140
leaq 0x1f77b(%rip), %rsi     # 0x245b7
leaq -0x3c0(%rbp), %rdi
leaq -0x2e(%rbp), %rdx
callq 0x4140
leaq 0x1f764(%rip), %rsi     # 0x245b7
leaq -0x3a0(%rbp), %rdi
leaq -0x2d(%rbp), %rdx
callq 0x4140
leaq 0x1f2ab(%rip), %rsi     # 0x24115
leaq -0x380(%rbp), %rdi
leaq -0x2c(%rbp), %rdx
callq 0x4140
pushq $0x38
popq %rsi
leaq -0x3e0(%rbp), %rdx
leaq -0x3c0(%rbp), %rcx
leaq -0x3a0(%rbp), %r8
leaq -0x380(%rbp), %r9
movq %r15, %rdi
callq 0x6f60
leaq -0x380(%rbp), %rdi
callq 0x46c8
leaq -0x3a0(%rbp), %rdi
callq 0x46c8
leaq -0x3c0(%rbp), %rdi
callq 0x46c8
leaq -0x3e0(%rbp), %rdi
callq 0x46c8
leaq -0x400(%rbp), %rdi
callq 0x46c8
leaq -0x420(%rbp), %rdi
callq 0x46c8
leaq -0x440(%rbp), %rdi
callq 0x46c8
leaq -0x460(%rbp), %rdi
callq 0x46c8
leaq -0x480(%rbp), %rdi
callq 0x46c8
leaq -0x4a0(%rbp), %rdi
callq 0x46c8
leaq -0x4c0(%rbp), %rdi
callq 0x46c8
leaq -0x4e0(%rbp), %rdi
callq 0x46c8
leaq -0x500(%rbp), %rdi
callq 0x46c8
leaq -0x520(%rbp), %rdi
callq 0x46c8
leaq -0x540(%rbp), %rdi
callq 0x46c8
leaq -0x560(%rbp), %rdi
callq 0x46c8
leaq -0x580(%rbp), %rdi
callq 0x46c8
leaq -0x5a0(%rbp), %rdi
callq 0x46c8
leaq -0x5c0(%rbp), %rdi
callq 0x46c8
leaq -0x5e0(%rbp), %rdi
callq 0x46c8
leaq -0x600(%rbp), %rdi
callq 0x46c8
leaq -0x620(%rbp), %rdi
callq 0x46c8
leaq -0x640(%rbp), %rdi
callq 0x46c8
leaq -0x660(%rbp), %rdi
callq 0x46c8
leaq -0x680(%rbp), %rdi
callq 0x46c8
leaq -0x738(%rbp), %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0x77c6
movq -0x698(%rbp), %rax
subq -0x6a0(%rbp), %rax
cmpq $0x60, %rax
je 0x500c
movq 0x30fc6(%rip), %rax     # 0x35fc0
movq (%rax), %rsi
leaq -0x738(%rbp), %rdi
pushq $0x1
popq %rdx
callq 0x7cae
leaq 0x1f1af(%rip), %rsi     # 0x241c2
leaq -0x180(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x7866
cmpb $0x0, 0x4a(%rax)
je 0x50f4
leaq -0x180(%rbp), %rdi
callq 0x46c8
leaq 0x1f16c(%rip), %rsi     # 0x241c2
leaq -0x160(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x7866
cmpb $0x1, 0x4a(%rax)
jne 0x5167
leaq 0x1f0f8(%rip), %rsi     # 0x24185
leaq -0x340(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x340(%rbp), %rsi
callq 0x7866
movb 0x4a(%rax), %bl
leaq -0x340(%rbp), %rdi
callq 0x46c8
leaq -0x160(%rbp), %rdi
callq 0x46c8
cmpb $0x1, %bl
jne 0x5173
movq 0x30f0a(%rip), %rdi     # 0x35fe8
leaq 0x1f078(%rip), %rsi     # 0x2415d
callq 0x4350
movq %rax, %rdi
callq 0x4190
jmp 0x515f
leaq 0x1f08a(%rip), %rsi     # 0x24185
leaq -0x360(%rbp), %rdi
leaq -0xd0(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0x7866
movb 0x4a(%rax), %bl
leaq -0x360(%rbp), %rdi
callq 0x46c8
leaq -0x180(%rbp), %rdi
callq 0x46c8
testb %bl, %bl
jne 0x504f
movq 0x30e9d(%rip), %rdi     # 0x35fe8
leaq 0x1efe3(%rip), %rsi     # 0x24135
callq 0x4350
movq %rax, %rdi
callq 0x4190
pushq $0x1
popq %rdi
callq 0x43d0
leaq -0x160(%rbp), %rdi
callq 0x46c8
leaq -0x100(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
leaq -0xe0(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0xc8(%rbp), %rdx
andl $0x0, (%rdx)
andq $0x0, 0x8(%rdx)
movq %rdx, 0x10(%rdx)
movq %rdx, 0x18(%rdx)
andq $0x0, 0x20(%rdx)
leaq -0x138(%rbp), %rdx
andl $0x0, (%rdx)
xorl %esi, %esi
andq $0x0, 0x8(%rdx)
movb %sil, (%rax)
movb %sil, (%rcx)
movq %rdx, 0x10(%rdx)
movq %rdx, 0x18(%rdx)
andq $0x0, 0x20(%rdx)
movq -0x6a0(%rbp), %rsi
leaq -0x320(%rbp), %rdi
callq 0x4470
movq -0x6a0(%rbp), %rsi
addq $0x20, %rsi
leaq -0x300(%rbp), %rdi
callq 0x4470
movq -0x6a0(%rbp), %rsi
addq $0x40, %rsi
leaq -0x2e0(%rbp), %rdi
callq 0x4470
leaq 0x1ee87(%rip), %rsi     # 0x240a2
leaq -0x2c0(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x2c0(%rbp), %rsi
callq 0x7866
movb 0x4a(%rax), %al
movb %al, -0x29(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x46c8
leaq 0x1ee8e(%rip), %rsi     # 0x240e8
leaq -0x2a0(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
callq 0x7866
movb 0x4a(%rax), %al
movb %al, -0x2b(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0x46c8
leaq 0x1ee76(%rip), %rsi     # 0x2410f
leaq -0x280(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0x7866
movb 0x4a(%rax), %bl
leaq -0x280(%rbp), %rdi
callq 0x46c8
leaq 0x1eeed(%rip), %rsi     # 0x241c2
leaq -0x260(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x260(%rbp), %rsi
callq 0x7866
movb 0x4a(%rax), %r14b
leaq -0x260(%rbp), %rdi
callq 0x46c8
cmpb $0x1, %r14b
jne 0x5409
leaq 0x1eea6(%rip), %rsi     # 0x241c2
leaq -0x240(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x7866
movq %rax, %rdi
callq 0x6ec8
leaq -0x110(%rbp), %rdi
movq %rax, %rsi
callq 0x41d0
leaq -0x240(%rbp), %rdi
callq 0x46c8
movq 0x30c7c(%rip), %rdi     # 0x35fe8
leaq 0x1ee1e(%rip), %rsi     # 0x24191
callq 0x4350
leaq -0x110(%rbp), %rsi
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4190
leaq -0x220(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x4470
movzbl %bl, %ecx
leaq -0x220(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0x3c(%rbp), %rdx
callq 0x1c41a
movl %eax, %ebx
leaq -0x220(%rbp), %rdi
callq 0x46c8
leaq 0x30fbf(%rip), %rsi     # 0x36390
leaq -0xd0(%rbp), %rdi
callq 0x5df6
andq $0x0, (%rax)
testl %ebx, %ebx
jns 0x553a
movq 0x30bf8(%rip), %rdi     # 0x35fe8
leaq 0x1edae(%rip), %rsi     # 0x241a5
callq 0x4350
movq %rax, %rdi
callq 0x4190
jmp 0x515f
xorl %r14d, %r14d
leaq 0x1ed72(%rip), %rsi     # 0x24185
leaq -0x200(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x7866
movb 0x4a(%rax), %bl
leaq -0x200(%rbp), %rdi
callq 0x46c8
movb %bl, -0x2a(%rbp)
cmpb $0x1, %bl
jne 0x5636
leaq 0x1ed67(%rip), %rsi     # 0x241c2
leaq -0x1e0(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x4140
leaq -0x738(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x7866
movq %rax, %rdi
callq 0x6ec8
leaq -0xf0(%rbp), %rdi
movq %rax, %rsi
callq 0x41d0
leaq -0x1e0(%rbp), %rdi
callq 0x46c8
movq 0x30b3d(%rip), %rdi     # 0x35fe8
leaq 0x1ed3a(%rip), %rsi     # 0x241ec
callq 0x4350
leaq -0xf0(%rbp), %rsi
movq %rax, %rdi
callq 0x4310
movq %rax, %rdi
callq 0x4190
leaq -0x140(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x209d8
movl %eax, %ebx
leaq -0x140(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x210b8
movl $0x120, %edi            # imm = 0x120
callq 0x4360
movq %rax, %r14
leaq -0xd0(%rbp), %rsi
movq %rax, %rdi
callq 0xc590
testl %ebx, %ebx
jns 0x55c9
movq 0x30ac7(%rip), %rdi     # 0x35fe8
leaq 0x1ecd9(%rip), %rsi     # 0x24201
callq 0x4350
movq %rax, %rdi
callq 0x4190
jmp 0x515f
movq 0x30aa7(%rip), %rdi     # 0x35fe8
leaq 0x1f06e(%rip), %rsi     # 0x245b6
callq 0x4350
leaq 0x1ec79(%rip), %rsi     # 0x241cd
movq %rax, %rdi
callq 0x4350
movq -0xa8(%rbp), %rsi
movq %rax, %rdi
callq 0x4260
movq %rax, %rdi
callq 0x4190
movq 0x30a6e(%rip), %rdi     # 0x35fe8
leaq 0x1f035(%rip), %rsi     # 0x245b6
callq 0x4350
leaq 0x1ec47(%rip), %rsi     # 0x241d4
movq %rax, %rdi
callq 0x4350
movl -0x3c(%rbp), %esi
movq %rax, %rdi
callq 0x45e0
movq %rax, %rdi
callq 0x4190
movl $0x120, %edi            # imm = 0x120
callq 0x4360
movq %rax, %r14
leaq -0xd0(%rbp), %rsi
movq %rax, %rdi
callq 0xc590
jmp 0x540c
movq 0x30a18(%rip), %rdi     # 0x35fe8
leaq 0x1efdf(%rip), %rsi     # 0x245b6
callq 0x4350
leaq 0x1ec47(%rip), %rsi     # 0x2422a
movq %rax, %rdi
callq 0x4350
movq -0x118(%rbp), %rsi
movq %rax, %rdi
callq 0x4260
movq %rax, %rdi
callq 0x4190
movq 0x309df(%rip), %rdi     # 0x35fe8
leaq 0x1efa6(%rip), %rsi     # 0x245b6
callq 0x4350
leaq 0x1ec1b(%rip), %rsi     # 0x24237
movq %rax, %rdi
callq 0x4350
movq %rax, %rdi
movl %ebx, %esi
callq 0x45e0
movq %rax, %rdi
callq 0x4190
movq 0x309ab(%rip), %rdi     # 0x35fe8
leaq 0x1ec01(%rip), %rsi     # 0x24245
callq 0x4350
movq %rax, %rdi
callq 0x4190
leaq -0x1c0(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x4470
leaq -0x80(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x6594
pushq $0x1
popq %rbx
leaq -0x1c0(%rbp), %rdi
callq 0x46c8
leaq -0x790(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x760(%rbp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq -0x90(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq -0x908(%rbp), %r15
leaq -0x918(%rbp), %r13
movq -0x80(%rbp), %rdi
movq (%rdi), %rax
leaq -0xa0(%rbp), %rsi
callq *(%rax)
testb %al, %al
je 0x5951
movl %ebx, %eax
xorl %edx, %edx
movl $0x186a0, %ecx          # imm = 0x186A0
divl %ecx
testl %edx, %edx
jne 0x5728
movq 0x308de(%rip), %rdi     # 0x35fe8
leaq 0x1eb46(%rip), %rsi     # 0x24257
callq 0x4350
movq %rax, %rdi
movl %ebx, %esi
callq 0x45e0
movq %rax, %rdi
callq 0x4190
leaq -0xa0(%rbp), %rdi
pushq $0xa
popq %rsi
callq 0x5d89
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, -0x78(%rbp)
cmpb $0x0, -0x2b(%rbp)
je 0x57d9
leaq -0x60(%rbp), %rax
movq %rax, -0x70(%rbp)
andq $0x0, -0x68(%rbp)
movb $0x0, -0x60(%rbp)
movq %r13, %rdi
leaq -0xa0(%rbp), %rsi
pushq $0x8
popq %rdx
callq 0x4590
movq -0x918(%rbp), %rax
movq -0x18(%rax), %rax
orl $0x1000, -0x900(%rbp,%rax) # imm = 0x1000
movq %r13, %rdi
leaq -0x78(%rbp), %rsi
callq 0x4250
movq %r13, %rdi
leaq -0x70(%rbp), %rsi
callq 0x4090
leaq -0x70(%rbp), %rdi
pushq $0x9
popq %rsi
callq 0x5d89
leaq -0x70(%rbp), %rdi
pushq $0x20
popq %rsi
callq 0x5d89
leaq -0xa0(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x41d0
movq %r13, %rdi
callq 0x4180
leaq -0x70(%rbp), %rdi
callq 0x46c8
xorl %r12d, %r12d
movl %r12d, %r12d
cmpq %r12, -0x98(%rbp)
jbe 0x5841
movq -0xa0(%rbp), %rax
movb (%rax,%r12), %al
movq %r15, -0x918(%rbp)
movb %al, -0x908(%rbp)
movq $0x1, -0x910(%rbp)
movb $0x0, -0x907(%rbp)
movq %r14, %rdi
movq %r13, %rsi
callq 0xca7a
testb %al, %al
jne 0x5834
movq %r14, %rdi
movq %r13, %rsi
movsd 0x1e7e1(%rip), %xmm0    # 0x24010
callq 0xc792
movq %r13, %rdi
callq 0x46c8
incl %r12d
jmp 0x57dc
andl $0x0, -0x68(%rbp)
andq $0x0, -0x60(%rbp)
leaq -0x68(%rbp), %rax
movq %rax, -0x58(%rbp)
movq %rax, -0x50(%rbp)
andq $0x0, -0x48(%rbp)
cmpb $0x0, -0x2a(%rbp)
je 0x5898
movq %r13, %rdi
leaq -0xa0(%rbp), %rsi
leaq 0x30b1e(%rip), %rdx     # 0x36390
movq %r14, %rcx
xorl %r8d, %r8d
callq 0xe1f0
cmpb $0x0, -0x29(%rbp)
je 0x58cf
leaq -0x140(%rbp), %rdi
movq %r13, %rsi
leaq -0x70(%rbp), %rdx
callq 0x176c1
jmp 0x58ea
cmpb $0x0, -0x29(%rbp)
je 0x58f4
movq %r13, %rdi
leaq -0xa0(%rbp), %rsi
leaq 0x30ae1(%rip), %rdx     # 0x36390
movq %r14, %rcx
xorl %r8d, %r8d
callq 0xe1f0
leaq -0xd0(%rbp), %rdi
movq %r13, %rsi
leaq -0x70(%rbp), %rdx
callq 0x17cf0
jmp 0x58ea
leaq -0x140(%rbp), %rdi
movq %r13, %rsi
leaq -0x70(%rbp), %rdx
movsd 0x1e723(%rip), %xmm0    # 0x24008
callq 0x1727c
movq %r13, %rdi
callq 0xf574
jmp 0x5925
movq %r13, %rdi
leaq -0xd0(%rbp), %rsi
callq 0xc590
movq %r13, %rdi
leaq -0xa0(%rbp), %rsi
leaq -0x70(%rbp), %rdx
leaq 0x30a78(%rip), %rcx     # 0x36390
callq 0x16e84
movq %r13, %rdi
callq 0xc844
movsd -0x78(%rbp), %xmm0
leaq -0x70(%rbp), %rdi
leaq -0x768(%rbp), %rsi
leaq -0x798(%rbp), %rdx
callq 0x2023e
incl %ebx
leaq -0x70(%rbp), %rdi
callq 0x5eac
jmp 0x56dc
testq %r14, %r14
je 0x5966
movq %r14, %rdi
callq 0xc844
movq %r14, %rdi
callq 0x4330
leaq -0x1a0(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0x4470
leaq -0x1a0(%rbp), %rdi
leaq -0x798(%rbp), %rsi
pushq $0x1
popq %rdx
pushq $0xa
popq %rcx
callq 0x1c798
leaq -0x1a0(%rbp), %rdi
callq 0x46c8
leaq -0x768(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
pushq $0x1
popq %rdx
pushq $0xa
popq %rcx
callq 0x20764
xorl %edi, %edi
callq 0x43d0
jmp 0x5a2f
movq %rax, %rbx
leaq -0x1a0(%rbp), %rdi
jmp 0x5a28
jmp 0x59f6
movq %rax, %rbx
leaq -0x918(%rbp), %rdi
callq 0xc844
jmp 0x59f9
jmp 0x59f6
jmp 0x59e3
movq %rax, %rbx
leaq -0x918(%rbp), %rdi
callq 0xf574
jmp 0x59f9
jmp 0x59f6
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
callq 0x5eac
jmp 0x5a32
movq %rax, %rbx
leaq -0x918(%rbp), %rdi
jmp 0x5a28
movq %rax, %rbx
leaq -0x918(%rbp), %rdi
callq 0x4180
jmp 0x5a24
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
callq 0x46c8
jmp 0x5a32
movq %rax, %rbx
leaq -0xa0(%rbp), %rdi
callq 0x46c8
leaq -0x768(%rbp), %rdi
callq 0x5eac
leaq -0x798(%rbp), %rdi
callq 0x5f44
leaq -0x80(%rbp), %rdi
callq 0x6688
jmp 0x5b07
movq %rax, %rbx
leaq -0x1c0(%rbp), %rdi
jmp 0x5afd
jmp 0x5b04
jmp 0x5b04
jmp 0x5b04
jmp 0x5a86
jmp 0x5b04
movq %rax, %rbx
movq %r14, %rdi
callq 0x4330
jmp 0x5b07
movq %rax, %rbx
leaq -0x1e0(%rbp), %rdi
jmp 0x5afd
jmp 0x5b04
movq %rax, %rbx
leaq -0x200(%rbp), %rdi
jmp 0x5afd
movq %rax, %rbx
leaq -0x220(%rbp), %rdi
jmp 0x5afd
jmp 0x5b04
movq %rax, %rbx
leaq -0x240(%rbp), %rdi
jmp 0x5afd
jmp 0x5b04
movq %rax, %rbx
leaq -0x260(%rbp), %rdi
jmp 0x5afd
jmp 0x5b04
movq %rax, %rbx
leaq -0x280(%rbp), %rdi
jmp 0x5afd
jmp 0x5b04
movq %rax, %rbx
leaq -0x2a0(%rbp), %rdi
jmp 0x5afd
jmp 0x5b04
movq %rax, %rbx
leaq -0x2c0(%rbp), %rdi
callq 0x46c8
jmp 0x5b07
movq %rax, %rbx
leaq -0x2e0(%rbp), %rdi
callq 0x46c8
jmp 0x5b18
movq %rax, %rbx
leaq -0x300(%rbp), %rdi
callq 0x46c8
jmp 0x5b3a
movq %rax, %rbx
leaq -0x340(%rbp), %rdi
callq 0x46c8
jmp 0x5b91
movq %rax, %rbx
leaq -0x320(%rbp), %rdi
callq 0x46c8
jmp 0x5b4d
jmp 0x5b8e
movq %rax, %rbx
leaq -0x140(%rbp), %rdi
callq 0x5eac
leaq -0xd0(%rbp), %rdi
callq 0x5f44
leaq -0xf0(%rbp), %rdi
callq 0x46c8
leaq -0x110(%rbp), %rdi
jmp 0x5d6b
movq %rax, %rbx
leaq -0x360(%rbp), %rdi
callq 0x46c8
jmp 0x5ba7
movq %rax, %rbx
leaq -0x160(%rbp), %rdi
jmp 0x5d6b
jmp 0x5ba4
jmp 0x5d72
movq %rax, %rbx
leaq -0x180(%rbp), %rdi
jmp 0x5d6b
jmp 0x5d72
jmp 0x5d72
movq %rax, %rbx
leaq -0x380(%rbp), %rdi
callq 0x46c8
jmp 0x5bd1
movq %rax, %rbx
leaq -0x3a0(%rbp), %rdi
callq 0x46c8
jmp 0x5be2
movq %rax, %rbx
leaq -0x3c0(%rbp), %rdi
callq 0x46c8
jmp 0x5bf3
movq %rax, %rbx
leaq -0x3e0(%rbp), %rdi
callq 0x46c8
jmp 0x5c06
jmp 0x5c03
movq %rax, %rbx
leaq -0x400(%rbp), %rdi
callq 0x46c8
jmp 0x5c17
movq %rax, %rbx
leaq -0x420(%rbp), %rdi
callq 0x46c8
jmp 0x5c28
movq %rax, %rbx
leaq -0x440(%rbp), %rdi
callq 0x46c8
jmp 0x5c39
movq %rax, %rbx
leaq -0x460(%rbp), %rdi
callq 0x46c8
jmp 0x5c4c
jmp 0x5c49
movq %rax, %rbx
leaq -0x480(%rbp), %rdi
callq 0x46c8
jmp 0x5c5d
movq %rax, %rbx
leaq -0x4a0(%rbp), %rdi
callq 0x46c8
jmp 0x5c6e
movq %rax, %rbx
leaq -0x4c0(%rbp), %rdi
callq 0x46c8
jmp 0x5c7f
movq %rax, %rbx
leaq -0x4e0(%rbp), %rdi
callq 0x46c8
jmp 0x5c92
jmp 0x5c8f
movq %rax, %rbx
leaq -0x500(%rbp), %rdi
callq 0x46c8
jmp 0x5ca3
movq %rax, %rbx
leaq -0x520(%rbp), %rdi
callq 0x46c8
jmp 0x5cb4
movq %rax, %rbx
leaq -0x540(%rbp), %rdi
callq 0x46c8
jmp 0x5cc5
movq %rax, %rbx
leaq -0x560(%rbp), %rdi
callq 0x46c8
jmp 0x5cd8
jmp 0x5cd5
movq %rax, %rbx
leaq -0x580(%rbp), %rdi
callq 0x46c8
jmp 0x5ce9
movq %rax, %rbx
leaq -0x5a0(%rbp), %rdi
callq 0x46c8
jmp 0x5cfa
movq %rax, %rbx
leaq -0x5c0(%rbp), %rdi
callq 0x46c8
jmp 0x5d0b
movq %rax, %rbx
leaq -0x5e0(%rbp), %rdi
callq 0x46c8
jmp 0x5d1e
jmp 0x5d1b
movq %rax, %rbx
leaq -0x600(%rbp), %rdi
callq 0x46c8
jmp 0x5d2f
movq %rax, %rbx
leaq -0x620(%rbp), %rdi
callq 0x46c8
jmp 0x5d40
movq %rax, %rbx
leaq -0x640(%rbp), %rdi
callq 0x46c8
jmp 0x5d51
movq %rax, %rbx
leaq -0x660(%rbp), %rdi
callq 0x46c8
jmp 0x5d64
jmp 0x5d61
movq %rax, %rbx
leaq -0x680(%rbp), %rdi
callq 0x46c8
jmp 0x5d75
movq %rax, %rbx
leaq -0x738(%rbp), %rdi
callq 0x5e60
movq %rbx, %rdi
callq 0x4600