// File: /workspace/github_cpp_makefile_star2_O1/kmyk[P]codevs-for-student-2016/Main.cpp
// Function: AI::think(primitive::input_t const&)
output_t think(input_t const & input) {
#ifndef RELEASE
        stopwatch watch, total_watch;
#endif

#ifndef RELEASE
        // logging
        cerr << endl;
        cerr << "turn: " << input.turn << endl;
        cerr << "remaining time: " << input.remaining_time << endl;
        cerr << "score: " << (scores.empty() ? 0 : scores.back()) << endl;
        cerr << "obstacles: " << input.self_obstacles - input.opponent_obstacles << endl;
        cerr << "self dropped obstacles: " << count_obstacle_blocks(input.self_field) << endl;
        cerr << "opp. dropped obstacles: " << count_obstacle_blocks(input.opponent_field) << endl;
        cerr << "self estimated chain: " << estimate_with_erasing(input.self_field).chain << endl;
        cerr << "opp. estimated chain: " << estimate_with_erasing(input.opponent_field).chain << endl;

        // check
        if (not inputs.empty()) {
            field_t const & field = input.self_field;
            auto & last = inputs.back();
            pack_t const & last_filled_pack = fill_obstacles(config.packs[last.turn], last.self_obstacles);
            result_t result; int result_erased; field_t nfield; tie(result, result_erased, nfield) = simulate_with_output(last.self_field, last_filled_pack, outputs.back());
            if (nfield != field) {
                cerr << "<<<" << endl;
                cerr << nfield << endl;
                cerr << "===" << endl;
                cerr << field << endl;
                cerr << ">>>" << endl;
            }
            assert (nfield == field);
        }
#endif

        // prepare
        if (input.turn == 0) { // 初期化
            self_history.push_back(initial_photon(input.turn, input.self_obstacles,     input.self_field));
            oppo_history.push_back(initial_photon(input.turn, input.opponent_obstacles, input.opponent_field));
            beam_generation = 1;
        }
        { // 自分のビーム準備
            shared_ptr<photon_t> const & pho = self_history.back();
            vector<shared_ptr<photon_t> > updateds;
            bool updated = (pho->obstacles != input.self_obstacles - input.opponent_obstacles);
            if (updated) {
                if (input.self_obstacles <= 0 and input.self_obstacles - input.opponent_obstacles <= 0) {
                    updated = false; // 勝ってるときは時間節約のため無視
                } else {
                    update_photon_obstacles(pho, input.self_obstacles - input.opponent_obstacles, config.packs, [&](shared_ptr<photon_t> const & pho) {
                        updateds.push_back(pho);
                    });
                }
            }
            evaluate_photon_init(pho);
            step_photon_all(pho, config.packs[input.turn]);
            // ビームのcacheの更新
            if (input.turn == 0) {
                que.emplace_back(compare_photon_with_first);
                que.back().emplace(pho->evaluation.score, pho);
                pho->beam_generation = beam_generation;
            } else {
                if (is_rejected(pho)) {
                    que.clear();
                    fired.clear();
                    que.emplace_back(compare_photon_with_first);
                    beam_generation += 1;
                    que.back().emplace(pho->evaluation.score, pho);
                    pho->beam_generation = beam_generation;
                } else if (updated) {
#ifndef RELEASE
                    cerr << "queue shifted" << endl;
#endif
                    beam_generation += 1;
                    auto shift = [&](deque<functional_priority_queue<pair<double, weak_ptr<photon_t> > > > & que) {
                        que[0] = functional_priority_queue<pair<double, weak_ptr<photon_t> > >(compare_photon_with_first);
                        repeat (i, que.size() - 1) {
                            while (not que[i+1].empty()) {
                                shared_ptr<photon_t> npho = que[i+1].top().second.lock(); que[i+1].pop();
                                if (not npho) continue;
                                que[i].emplace(npho->evaluation.score, npho);
                                npho->beam_generation = beam_generation;
                            }
                            que[i+1] = functional_priority_queue<pair<double, weak_ptr<photon_t> > >(compare_photon_with_first);
                        }
                    };
                    shift(que);
                    shift(fired);
                    for (auto & pho : updateds) {
                        int i = pho->turn - input.turn;
                        while (i >= que.size()) que.emplace_back(compare_photon_with_first);
                        assert (pho->beam_generation != beam_generation);
                        que[i].emplace(pho->evaluation.score, pho);
                        pho->beam_generation = beam_generation;
                    }
                } else {
                    que.pop_front();
                    fired.pop_front();
                }
            }
        }
        if (input.turn != 0) { // 相手の準備
            shared_ptr<photon_t> const & pho = oppo_history.back();
            step_photon_all(pho, config.packs[input.turn-1]);
            output_t output = invalid_output; // 相手の出力は直接は見えない
            repeat_from (x, - pack_size + 1, width) repeat (r, 4) {
                shared_ptr<photon_t> const & npho = pho->next[x+pack_size-1][r];
                if (not npho) continue;
                if (npho->field == input.opponent_field) {
                    output = npho->output;
                    break;
                }
            }
            if (output == invalid_output) {
#ifndef RELEASE
                cerr << "oppo reset cache" << endl;
#endif
                oppo_history.push_back(initial_photon(input.turn, input.opponent_obstacles - input.self_obstacles, input.opponent_field));
            } else {
                prune_photon(pho, output);
                shared_ptr<photon_t> const & npho = pho->next[output.x+pack_size-1][output.rotate];
                oppo_history.push_back(npho);
                update_photon_obstacles(npho, input.opponent_obstacles - input.self_obstacles, config.packs, [](shared_ptr<photon_t> const & pho){}); // ここでお邪魔を更新
            }
            evaluate_photon_init(oppo_history.back());
            step_photon_all(oppo_history.back(), config.packs[input.turn]);
        }

        // 相手側の探索
#ifndef RELEASE
        watch = stopwatch();
#endif
        const int oppo_depth = max<int>(4, 8 - (180 * 1000 - input.remaining_time) / (30 * 1000));
        opponent_info_t oppo = {}; {
            const int beam_width = 60;
            const int beam_depth = oppo_depth;
            oppo.result.resize(oppo_depth);
            auto cont = [&](shared_ptr<photon_t> const & pho) {
                int age = pho->turn - input.turn;
                assert (age >= 1);
                setmax(oppo.result[age-1], pho->result);
                return is_rejected(pho) ? nullptr : pho; // 打ち切るか否か
            };
            shared_ptr<photon_t> initial = oppo_history.back();
            beam_search(initial, config, beam_width, beam_depth, cont);
        }
        oppo.dropped_obstacles = oppo_history.back()->dropped_obstacles;
        oppo.best = *whole(max_element, oppo.result);
        repeat (i, oppo_depth) setmax<int>(oppo.score, pow(0.8, i) * oppo.result[i].score); // ここけっこう重要
#ifndef RELEASE
        repeat (i, oppo_depth) {
            cerr << "oppo " << i << ": " << oppo.result[i].chain << "c " << oppo.result[i].score << "pt" << endl;
        }
        cerr << "oppo elapsed: " << watch() << "ms" << endl;
#endif

        // メインの探索 chokudai search
#ifndef RELEASE
        watch = stopwatch();
#endif
        output_t output = invalid_output; {
            const int estimated_chain = self_history.back()->evaluation.estimateds.front().first.chain;
            const int beam_width = 8; // TODO: この値がどういう意味を持つか理解する
            const int beam_depth = max(22 - min(14, input.turn), 18 - estimated_chain/2); // いい感じに減少させる
            const int time_limit = min(input.remaining_time / 30, max(1200, 170 * max(estimated_chain, oppo.best.chain))); // msec // 毎ターン数秒ずつ
            while (beam_depth+1 >= que.size()) que.emplace_back(compare_photon_with_first);
            while (fired.size() < que.size()) fired.emplace_back(compare_photon_with_first);
            bool is_fired = false;
            double best_score = - INFINITY;
            shared_ptr<photon_t> result = nullptr;
            auto cont = [&](shared_ptr<photon_t> const & pho) {
                int age = pho->turn - input.turn;
                assert (age >= 1);
                bool cur_is_fired = is_effective_firing(pho->result.score, pho->obstacles, age, oppo);
                double cur_score = evaluate_photon_for_output(pho, input.turn, oppo);
                if (make_pair(is_fired, best_score) < make_pair(cur_is_fired, cur_score)) {
                    is_fired = cur_is_fired;
                    best_score = cur_score;
                    result = pho;
#ifndef RELEASE
                    cerr << "result: +" << age << "t " << cur_score << "pt";
                    if (pho->result.chain >= chain_of_fire) {
                        bool is_eff = is_effective_firing(pho->result.score, pho->obstacles, age, oppo);
                        cerr << " (fire " << pho->result.chain << "c " << pho->result.score << "pt" << (is_eff ? " eff." : "") << ")";
                    } else {
                        cerr << " (" << pho->evaluation.estimateds.front().first.chain << "c " << pho->evaluation.estimateds.front().first.score << "pt)";
                    }
                    cerr << endl;
#endif
                }
                if (is_rejected(pho)) {
                    fired[age-1].emplace(pho->result.score, pho); // ここで葉の控えに追加
                    return shared_ptr<photon_t>(nullptr);
                } else {
                    return pho;
                }
            };
#ifndef RELEASE
            cerr << "load cache" << endl;
#endif
            repeat (i, fired.size()) { // 古い葉は覚えておいて直接見る
                while (not fired[i].empty()) {
                    shared_ptr<photon_t> const & pho = fired[i].top().second.lock();
                    if (not pho) { fired[i].pop(); continue; } // だめなのを削る
                    cont(pho);
                    anneal_photon(self_history.back(), outputs_photon_from(pho, input.turn), config, que, beam_generation, cont); // 近傍見ておく
                    break;
                }
            }
#ifndef RELEASE
            cerr << "chokudai search" << endl;
#endif
            chokudai_search(que, config, input.turn, beam_width, beam_depth, beam_generation, self_history.back(), time_limit, cont);
            if (result) {
                shared_ptr<photon_t> pho = parent_photon_at(result, input.turn + 1);
                assert (pho);
                output = pho->output;
            }
#ifndef RELEASE
            repeat (i, beam_depth) cerr << "width at " << i << ": beam " << que[i].size() << " / fire " << fired[i].size()<< endl;
            cerr << "done" << endl;
            repeat (i, fired.size()) {
                if (not fired[i].empty()) {
                    shared_ptr<photon_t> const & pho = fired[i].top().second.lock();
                    int age = pho->turn - input.turn;
                    bool is_eff = is_effective_firing(pho->result.score, pho->obstacles, age, oppo);
                    cerr << "fire: +" << age << "t " << pho->result.chain << "c " << pho->result.score << "pt" << (is_eff ? " eff." : "") << endl;
                }
            }
#endif
        }
#ifndef RELEASE
        cerr << "self elapsed: " << watch() << "ms" << endl;
#endif

        // 相手を刺せるなら強制発火
#ifndef RELEASE
        watch = stopwatch();
#endif
        const int fire_depth =
            input.remaining_time > 90 * 1000 ? 3 :
            input.remaining_time > 60 * 1000 ? 2 :
            input.remaining_time > 30 * 1000 ? 1 :
            0;
        if (input.remaining_time > 20 * 1000) {
            if (input.opponent_obstacles <= 5) { // 既に送れてるならしない
                repeat (i, fire_depth) if (i < fired.size() and not fired[i].empty()) {
                    shared_ptr<photon_t> const & best = fired[i].top().second.lock();
                    assert (best);
                    if (output == best->output) break; // もう発火することにしてあるなら見ない
                    if (best->obstacles + max(30, oppo.result[0].score/5 + 10) > 0) continue; // 明らかにだめな場合はしない
                    if (best->obstacles <= 20) continue; // 勝ってるからといって遊ばない
#ifndef RELEASE
                    cerr << "firing check for: +" << 1+i << "t " << best->result.chain << "c " << best->result.score << "pt" << endl;
#endif
                    const int beam_width = 120;
                    const int beam_depth = 10;
                    auto cont = [&](shared_ptr<photon_t> pho) {
                        int age = pho->turn - input.turn;
                        assert (age >= 1);
                        if (age == 1) {
                            pho = make_shared<photon_t>(*pho);
                            repeat_from (x, - pack_size + 1, width) repeat (r, 4) {
                                pho->cached[x+pack_size-1][r] = false;
                                pho->next[x+pack_size-1][r] = nullptr;
                            }
                            pho->obstacles += best->result.score/5; // ここで足す
                        }
                        if (- pho->obstacles >= 20) {
#ifndef RELEASE
                            cerr << "counter found: +" << age << "t " << pho->result.chain << "c " << pho->result.score << "pt" << endl;
#endif
                            throw counter_exception();
                        }
                        return is_rejected(pho) ? nullptr : pho;
                    };
                    shared_ptr<photon_t> const & initial = oppo_history.back();
                    try {
                        beam_search(initial, config, beam_width, beam_depth, cont);
                        output = parent_photon_at(best, input.turn + 1)->output;
#ifndef RELEASE
                        cerr << "fire" << endl;
#endif
                    } catch (counter_exception e) {
                        // nop
                    }
                }
            }
        }
#ifndef RELEASE
        cerr << "firing beam elapsed: " << watch() << "ms" << endl;
#endif

        // finalize
        const pack_t filled_pack = fill_obstacles(config.packs[input.turn], input.self_obstacles);
        if (output == invalid_output) { // もうだめなら悪あがきの貪欲
#ifndef RELEASE
            cerr << "search failed..." << endl;
#endif
            int score = -1;
            repeat_from (x, - pack_size + 1, width) repeat (r, 4) {
                try {
                    result_t result = get<0>(simulate_with_output(input.self_field, filled_pack, make_output(x, r)));
                    if (score <= result.score) {
                        score = result.score;
                        output = make_output(x, r);
                    }
                } catch (simulate_invalid_output_exception e) {
                    // nop
                } catch (simulate_gameover_exception e) {
                    // nop
                }
            }
#ifndef RELEASE
            if (output == invalid_output) {
                cerr << "greedy failed..." << endl; // ここに来たら終了
            }
#endif
        }
        if (is_valid_output(input.self_field, filled_pack, output)) {
            inputs.push_back(input);
            outputs.push_back(output);
            results.push_back(get<0>(simulate_with_output(input.self_field, filled_pack, output)));
            int last_score = scores.empty() ? 0 : scores.back();
            scores.push_back(last_score + results.back().score);
            prune_photon(self_history.back(), output);
            self_history.push_back(self_history.back()->next[output.x+pack_size-1][output.rotate]);
        }
#ifndef RELEASE
        cerr << "total elapsed: " << total_watch() << "ms" << endl;
#endif
        return output;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x298, %rsp            # imm = 0x298
movq %rsi, %r12
movq %rdi, %r14
callq 0x2040
callq 0x2040
movq %rax, 0x1a0(%rsp)
movq 0x10084(%rip), %rbx     # 0x14ff0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0xa2bd(%rip), %rsi      # 0xf257
movl $0x6, %edx
movq %rbx, %rdi
callq 0x2180
movl (%r12), %esi
movq %rbx, %rdi
callq 0x2210
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r15, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0xa27a(%rip), %rsi      # 0xf25e
movl $0x10, %edx
movq %rbx, %rdi
callq 0x2180
movq %r12, 0x60(%rsp)
movl 0x4(%r12), %esi
movq %rbx, %rdi
callq 0x2210
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r15, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0xa23b(%rip), %rsi      # 0xf26f
movl $0x7, %edx
movq %rbx, %rdi
callq 0x2180
movq 0x50(%r14), %rax
xorl %ebx, %ebx
movl $0x0, %esi
movq %r14, 0x48(%rsp)
cmpq %rax, 0x48(%r14)
je 0x505a
movl -0x4(%rax), %esi
movq 0x48(%rsp), %rax
addq $0x48, %rax
movq %rax, 0x180(%rsp)
movq 0xff7e(%rip), %r15      # 0x14ff0
movq %r15, %rdi
callq 0x2210
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0xa1f2(%rip), %rsi      # 0xf29d
movl $0xb, %edx
movq %r15, %rdi
callq 0x2180
movq 0x60(%rsp), %r14
movl 0x8(%r14), %esi
subl 0xac(%r14), %esi
movq %r15, %rdi
callq 0x2210
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0xa176(%rip), %rsi      # 0xf277
movl $0x18, %edx
movq %r15, %rdi
callq 0x2180
leaq 0xc(%r14), %rax
movq %rax, 0x88(%rsp)
xorl %ecx, %ecx
xorl %edx, %edx
xorl %esi, %esi
cmpb $0xb, (%rax,%rdx)
sete %sil
addl %esi, %ebx
incq %rdx
cmpq $0x10, %rdx
jne 0x511e
incq %rcx
addq $0x10, %rax
cmpq $0xa, %rcx
jne 0x511c
movq 0xfea9(%rip), %r15      # 0x14ff0
movq %r15, %rdi
movl %ebx, %esi
callq 0x2210
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0xa10e(%rip), %rsi      # 0xf290
movl $0x18, %edx
movq %r15, %rdi
callq 0x2180
leaq 0xb0(%r14), %rcx
xorl %eax, %eax
movq %rcx, 0x50(%rsp)
xorl %esi, %esi
xorl %edx, %edx
xorl %edi, %edi
cmpb $0xb, (%rcx,%rdx)
sete %dil
addl %edi, %esi
incq %rdx
cmpq $0x10, %rdx
jne 0x51a1
incq %rax
addq $0x10, %rcx
cmpq $0xa, %rax
jne 0x519f
movq 0xfe26(%rip), %r13      # 0x14ff0
movq %r13, %rdi
callq 0x2210
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r15, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0xa0a6(%rip), %rsi      # 0xf2a9
movl $0x16, %edx
movq %r13, %rdi
callq 0x2180
movq 0x88(%rsp), %rdi
callq 0x30b7
shrq $0x20, %rax
movq %r13, %rdi
movl %eax, %esi
callq 0x2210
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r15, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0xa064(%rip), %rsi      # 0xf2c0
movl $0x16, %edx
movq %r13, %rdi
callq 0x2180
movq 0x50(%rsp), %rdi
callq 0x30b7
shrq $0x20, %rax
movq %r13, %rdi
movl %eax, %esi
callq 0x2210
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r15, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x48(%rsp), %rax
movq 0x20(%rax), %r15
cmpq %r15, 0x18(%rax)
je 0x546f
movslq -0x150(%r15), %rax
movq 0x48(%rsp), %rbx
movq (%rbx), %rcx
leaq (%rax,%rax,8), %rax
movq (%rcx,%rax), %rdi
movl -0x148(%r15), %edx
movzbl 0x8(%rcx,%rax), %esi
callq 0x284d
leaq 0x70(%rsp), %r8
movq %rax, (%r8)
movb %dl, 0x8(%r8)
addq $-0x144, %r15           # imm = 0xFEBC
movq 0x38(%rbx), %rcx
addq $-0x8, %rcx
leaq 0xc0(%rsp), %r12
movq %r12, %rdi
movq %r15, %rsi
movq %r8, %rdx
callq 0x2b1f
leaq 0x1e0(%rsp), %r15
movl $0xa0, %edx
movq %r15, %rdi
movq %r12, %rsi
callq 0x2120
movq %r15, %rdi
movq 0x88(%rsp), %rsi
callq 0x7693
testb %al, %al
je 0x546f
leaq 0x9f89(%rip), %rsi      # 0xf2d7
movl $0x3, %edx
movq %r13, %rdi
callq 0x2180
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r13, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0x1e0(%rsp), %rsi
movq %r13, %rdi
callq 0x76e1
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r15, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0x9f17(%rip), %rsi      # 0xf2db
movl $0x3, %edx
movq %r13, %rdi
callq 0x2180
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r13, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %r13, %rdi
movq 0x88(%rsp), %rsi
callq 0x76e1
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r15, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0x9ea5(%rip), %rsi      # 0xf2df
movl $0x3, %edx
movq %r13, %rdi
callq 0x2180
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r13, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl (%r14), %esi
testl %esi, %esi
jne 0x5513
movq 0x48(%rsp), %rax
leaq 0x78(%rax), %r15
movl 0x8(%r14), %edx
leaq 0xc0(%rsp), %r12
movq %r12, %rdi
movq 0x88(%rsp), %rcx
callq 0x3376
movq %r15, %rdi
movq %r12, %rsi
callq 0x9496
movq 0xc8(%rsp), %rdi
testq %rdi, %rdi
je 0x54bc
callq 0x7136
movq 0x48(%rsp), %rax
leaq 0x90(%rax), %r15
movl (%r14), %esi
movl 0xac(%r14), %edx
leaq 0xc0(%rsp), %r12
movq %r12, %rdi
movq 0x50(%rsp), %rcx
callq 0x3376
movq %r15, %rdi
movq %r12, %rsi
callq 0x9496
movq 0xc8(%rsp), %rdi
testq %rdi, %rdi
je 0x5504
callq 0x7136
movq 0x48(%rsp), %rax
movl $0x1, 0x148(%rax)
movq 0x48(%rsp), %rax
movq 0x80(%rax), %r15
xorpd %xmm0, %xmm0
movapd %xmm0, 0xc0(%rsp)
movq $0x0, 0xd0(%rsp)
movq -0x10(%r15), %rcx
movl 0x8(%r14), %eax
movl %eax, %esi
subl 0xac(%r14), %esi
addq $-0x10, %r15
cmpl %esi, 0x8(%rcx)
setne %bl
je 0x5582
testl %eax, %eax
setle %al
testl %esi, %esi
setle %cl
testb %cl, %al
je 0x5567
xorl %ebx, %ebx
jmp 0x5582
movb $0x1, %bl
leaq 0xc0(%rsp), %rcx
movq %r15, %rdi
movq 0x48(%rsp), %rdx
callq 0x77a2
xorpd %xmm0, %xmm0
movq (%r15), %rax
movupd %xmm0, 0xc8(%rax)
movslq (%r14), %rax
leaq (%rax,%rax,8), %rsi
movq 0x48(%rsp), %rax
addq (%rax), %rsi
movq %r15, %rdi
callq 0x3c0c
cmpl $0x0, (%r14)
je 0x5633
movq %r15, %rdi
callq 0x4118
testb %al, %al
je 0x581b
movq 0x48(%rsp), %rbx
leaq 0xa8(%rbx), %r12
movq %r12, %rdi
callq 0x7aba
leaq 0xf8(%rbx), %rdi
callq 0x7aba
leaq -0x1403(%rip), %rsi     # 0x41e2
movq %r12, %rdi
callq 0x79e0
movq 0x48(%rsp), %rax
incl 0x148(%rax)
movq 0xd8(%rax), %rdi
cmpq 0xe0(%rax), %rdi
jne 0x561d
movq 0x48(%rsp), %rax
movq 0xf0(%rax), %rax
movl $0x1f8, %edi            # imm = 0x1F8
addq -0x8(%rax), %rdi
addq $-0x38, %rdi
movl $0xc8, %esi
addq (%r15), %rsi
movq %r15, %rdx
callq 0x7a2a
jmp 0x5689
movq 0x48(%rsp), %rax
leaq 0xa8(%rax), %rdi
leaq -0x1464(%rip), %rsi     # 0x41e2
callq 0x79e0
movq 0x48(%rsp), %rax
movq 0xd8(%rax), %rdi
cmpq 0xe0(%rax), %rdi
jne 0x5675
movq 0x48(%rsp), %rax
movq 0xf0(%rax), %rax
movl $0x1f8, %edi            # imm = 0x1F8
addq -0x8(%rax), %rdi
addq $-0x38, %rdi
movl $0xc8, %esi
addq (%r15), %rsi
movq %r15, %rdx
callq 0x7a2a
movq 0x48(%rsp), %rax
movl 0x148(%rax), %eax
movq (%r15), %rcx
movl %eax, 0x100(%rcx)
leaq 0xc0(%rsp), %rdi
callq 0x7236
movslq (%r14), %rax
testq %rax, %rax
je 0x5a2c
movq 0x48(%rsp), %rdx
movq (%rdx), %rcx
movq 0x98(%rdx), %r15
addq $-0x10, %r15
leaq (%rax,%rax,8), %rax
leaq (%rcx,%rax), %rsi
addq $-0x9, %rsi
movq %r15, %rdi
callq 0x3c0c
movl $0xdeadbeef, %ebp       # imm = 0xDEADBEEF
movl $0xffffffff, %r13d      # imm = 0xFFFFFFFF
movq $-0x2, %rax
movl $0x138, %r12d           # imm = 0x138
movq %rax, 0xa0(%rsp)
xorl %ebx, %ebx
movq (%r15), %r14
addq %r12, %r14
movq (%rbx,%r14), %rdi
testq %rdi, %rdi
je 0x573b
addq $0x14, %rdi
movq 0x50(%rsp), %rsi
callq 0x8017
xorl %ecx, %ecx
testb %al, %al
je 0x5740
movq (%r14,%rbx), %rax
movq 0xb4(%rax), %rbp
movq %rbp, %r13
shrq $0x20, %r13
movl $0x9, %ecx
jmp 0x5740
movl $0xb, %ecx
cmpl $0xb, %ecx
je 0x5749
testl %ecx, %ecx
jne 0x5753
addq $0x10, %rbx
cmpq $0x40, %rbx
jne 0x56ff
movq 0xa0(%rsp), %rax
incq %rax
addq $0x40, %r12
cmpq $0xa, %rax
jne 0x56f5
movq 0x48(%rsp), %r14
leaq 0x90(%r14), %r12
movl %ebp, %eax
xorl $0xdeadbeef, %eax       # imm = 0xDEADBEEF
movl %r13d, %ecx
notl %ecx
orl %eax, %ecx
jne 0x59a2
leaq 0x9b62(%rip), %rsi      # 0xf2f1
movl $0x10, %edx
movq 0xf855(%rip), %rbx      # 0x14ff0
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x60(%rsp), %rax
movl (%rax), %esi
movl 0xac(%rax), %edx
subl 0x8(%rax), %edx
leaq 0xc0(%rsp), %r15
movq %r15, %rdi
movq 0x50(%rsp), %rcx
callq 0x3376
movq %r12, %rdi
movq %r15, %rsi
callq 0x9496
movq 0xc8(%rsp), %rdi
testq %rdi, %rdi
je 0x580c
callq 0x7136
movq 0x48(%rsp), %r14
movq 0x60(%rsp), %r15
jmp 0x59f8
testb %bl, %bl
je 0x634f
movq 0xf7c6(%rip), %r15      # 0x14ff0
leaq 0x9ab2(%rip), %rsi      # 0xf2e3
movl $0xd, %edx
movq %r15, %rdi
callq 0x2180
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0xf794(%rip), %rdi      # 0x14ff0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x48(%rsp), %rbx
incl 0x148(%rbx)
leaq 0x1e0(%rsp), %rdi
movq %rbx, (%rdi)
leaq 0xa8(%rbx), %r15
movq %r15, %rsi
callq 0x7af4
leaq 0xf8(%rbx), %rsi
leaq 0x1e0(%rsp), %rdi
callq 0x7af4
movq 0xc0(%rsp), %r13
movq 0xc8(%rsp), %r14
cmpq %r14, %r13
je 0x5998
movq 0x48(%rsp), %rax
leaq 0xb8(%rax), %rbx
leaq -0x16ec(%rip), %r12     # 0x41e2
movq (%r13), %rax
movslq (%rax), %rbp
movq 0x60(%rsp), %rax
movslq (%rax), %rax
subq %rax, %rbp
movq 0x48(%rsp), %rsi
movq 0xf0(%rsi), %rax
movq %rax, %rcx
subq 0xd0(%rsi), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,8), %rax
movq 0xc8(%rsi), %rcx
movq 0xd8(%rsi), %rdx
subq 0xe0(%rsi), %rdx
sarq $0x3, %rdx
movabsq $0x6db6db6db6db6db7, %rdi # imm = 0x6DB6DB6DB6DB6DB7
imulq %rdi, %rdx
addq %rax, %rdx
subq 0xb8(%rsi), %rcx
sarq $0x3, %rcx
imulq %rdi, %rcx
addq %rdx, %rcx
cmpq %rbp, %rcx
ja 0x5954
movq %r15, %rdi
movq %r12, %rsi
callq 0x79e0
jmp 0x58e0
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xa520
movq (%r13), %rsi
movl $0xc8, %ecx
addq %rcx, %rsi
movq %rax, %rdi
movq %r13, %rdx
callq 0x7f5a
movq 0x48(%rsp), %rax
movl 0x148(%rax), %eax
movq (%r13), %rcx
movl %eax, 0x100(%rcx)
addq $0x10, %r13
cmpq %r14, %r13
jne 0x58ce
movq 0x60(%rsp), %r14
jmp 0x569d
movq %r13, %rax
shlq $0x20, %rax
movl %ebp, %esi
orq %rax, %rsi
movq %r15, %rdi
callq 0x4072
movslq %ebp, %rax
shlq $0x6, %rax
addq (%r15), %rax
movslq %r13d, %rcx
shlq $0x4, %rcx
leaq (%rcx,%rax), %rbx
addq $0x1b8, %rbx            # imm = 0x1B8
movq %r12, %rdi
movq %rbx, %rsi
callq 0x8060
movq 0x60(%rsp), %r15
movl 0xac(%r15), %esi
subl 0x8(%r15), %esi
movq %rbx, %rdi
movq %r14, %rdx
callq 0x809f
movq 0x98(%r14), %rax
movq -0x10(%rax), %rax
xorpd %xmm0, %xmm0
movupd %xmm0, 0xc8(%rax)
movq 0x98(%r14), %rdi
addq $-0x10, %rdi
movslq (%r15), %rax
leaq (%rax,%rax,8), %rsi
addq (%r14), %rsi
callq 0x3c0c
movq %r15, %r14
callq 0x2040
movq %rax, 0x50(%rsp)
movl $0x2bf20, %eax          # imm = 0x2BF20
subl 0x4(%r14), %eax
cltq
imulq $-0x45e7b273, %rax, %rax # imm = 0xBA184D8D
movq %rax, %rcx
shrq $0x3f, %rcx
sarq $0x2d, %rax
addl %ecx, %eax
cmpl $-0x3, %eax
movl $0xfffffffc, %ebx       # imm = 0xFFFFFFFC
cmovgel %eax, %ebx
addl $0x8, %ebx
xorpd %xmm0, %xmm0
leaq 0x1e0(%rsp), %rdi
movapd %xmm0, 0x10(%rdi)
movapd %xmm0, (%rdi)
movq $0x0, 0x20(%rdi)
movq %rbx, %rsi
callq 0x82c4
movq 0x48(%rsp), %rax
movq 0x98(%rax), %rax
movq -0x10(%rax), %rcx
movq %rcx, 0xc0(%rsp)
movq -0x8(%rax), %rax
movq %rax, 0xc8(%rsp)
testq %rax, %rax
je 0x5ac6
movq 0xf508(%rip), %rcx      # 0x14fc0
cmpb $0x0, (%rcx)
je 0x5ac2
incl 0x8(%rax)
jmp 0x5ac6
lock
incl 0x8(%rax)
leaq 0xc0(%rsp), %rdi
leaq 0x1e0(%rsp), %r9
movq 0x48(%rsp), %rsi
movl $0x3c, %edx
movl %ebx, %ecx
movq %r14, %r8
callq 0x82f5
movq 0xc8(%rsp), %rdi
testq %rdi, %rdi
je 0x5afc
callq 0x7136
movq 0x48(%rsp), %rax
movq 0x98(%rax), %rax
movq -0x10(%rax), %rax
movl 0xc(%rax), %eax
movl %eax, 0x204(%rsp)
movq 0x1e0(%rsp), %rdx
movq 0x1e8(%rsp), %rax
cmpq %rax, %rdx
sete %sil
movq %rdx, %rcx
addq $0x8, %rcx
cmpq %rax, %rcx
sete %dil
orb %sil, %dil
je 0x5b45
movq %rdx, %rsi
jmp 0x5b78
movl (%rdx), %edi
movl (%rcx), %r8d
movq %rcx, %rsi
cmpl %r8d, %edi
jl 0x5b6c
movl 0x4(%rcx), %r9d
movq %rcx, %rsi
cmpl %r9d, 0x4(%rdx)
jl 0x5b62
movq %rdx, %rsi
cmpl %edi, %r8d
cmovgeq %rsi, %rdx
movq %rdx, %rsi
addq $0x8, %rcx
movq %rsi, %rdx
cmpq %rax, %rcx
jne 0x5b45
movq 0x48(%rsp), %rax
leaq 0x18(%rax), %rcx
movq %rcx, 0x178(%rsp)
addq $0x78, %rax
movq %rax, 0x188(%rsp)
movq (%rsi), %rax
movq %rax, 0x1f8(%rsp)
movl %ebx, %ebx
xorl %r14d, %r14d
xorps %xmm1, %xmm1
cvtsi2sd %r14d, %xmm1
movsd 0x961b(%rip), %xmm0     # 0xf1d0
callq 0x2220
movq 0x1e0(%rsp), %rax
xorps %xmm1, %xmm1
cvtsi2sdl (%rax,%r14,8), %xmm1
mulsd %xmm0, %xmm1
cvttsd2si %xmm1, %eax
cmpl %eax, 0x200(%rsp)
jge 0x5be3
movl %eax, 0x200(%rsp)
incq %r14
cmpq %r14, %rbx
jne 0x5ba5
xorl %r15d, %r15d
movq 0xf3fb(%rip), %r13      # 0x14ff0
leaq 0x970f(%rip), %rbp      # 0xf30b
movq 0x60(%rsp), %r14
movl $0x5, %edx
movq %r13, %rdi
leaq 0x96f2(%rip), %rsi      # 0xf302
callq 0x2180
movq %r13, %rdi
movl %r15d, %esi
callq 0x2210
movq %rax, %r12
movl $0x2, %edx
movq %rax, %rdi
leaq 0x9743(%rip), %rsi      # 0xf375
callq 0x2180
movq 0x1e0(%rsp), %rax
movl 0x4(%rax,%r15,8), %esi
movq %r12, %rdi
callq 0x2210
movq %rax, %r12
movl $0x2, %edx
movq %rax, %rdi
leaq 0x96aa(%rip), %rsi      # 0xf308
callq 0x2180
movq 0x1e0(%rsp), %rax
movl (%rax,%r15,8), %esi
movq %r12, %rdi
callq 0x2210
movq %rax, %r12
movl $0x2, %edx
movq %rax, %rdi
movq %rbp, %rsi
callq 0x2180
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
incq %r15
cmpq %r15, %rbx
jne 0x5c01
movq 0xf32b(%rip), %rdi      # 0x14ff0
leaq 0x9642(%rip), %rsi      # 0xf30e
movl $0xe, %edx
callq 0x2180
callq 0x2040
subq 0x50(%rsp), %rax
movabsq $0x431bde82d7b634db, %rcx # imm = 0x431BDE82D7B634DB
imulq %rcx
movq %rdx, %rsi
shrq $0x3f, %rsi
sarq $0x12, %rdx
addq %rdx, %rsi
movq 0xf2ee(%rip), %rdi      # 0x14ff0
callq 0x2070
movq %rax, %rbx
leaq 0x960c(%rip), %rsi      # 0xf31d
movl $0x2, %edx
movq %rax, %rdi
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
callq 0x2040
movq $-0x21524111, 0x58(%rsp) # imm = 0xDEADBEEF
movq 0x48(%rsp), %rdi
movq 0x80(%rdi), %rcx
movq -0x10(%rcx), %rcx
movq 0xd8(%rcx), %rcx
movl 0x4(%rcx), %ecx
movl (%r14), %edx
cmpl $0xe, %edx
movl $0xe, %esi
cmovll %edx, %esi
movl $0x16, %edx
subl %esi, %edx
movl %ecx, %esi
shrl $0x1f, %esi
addl %ecx, %esi
sarl %esi
movl $0x12, %r13d
subl %esi, %r13d
cmpl %r13d, %edx
cmovgl %edx, %r13d
movslq 0x4(%r14), %rdx
imulq $-0x77777777, %rdx, %rsi # imm = 0x88888889
shrq $0x20, %rsi
addl %edx, %esi
movl %esi, %edx
shrl $0x1f, %edx
sarl $0x4, %esi
addl %edx, %esi
movl 0x1fc(%rsp), %edx
cmpl %edx, %ecx
cmovgl %ecx, %edx
imull $0xaa, %edx, %ecx
cmpl $0x8, %edx
movl $0x4b0, %ebp            # imm = 0x4B0
cmovgel %ecx, %ebp
movq %rax, %r12
cmpl %esi, %ebp
cmovgel %esi, %ebp
leal 0x1(%r13), %eax
movslq %eax, %rbx
leaq 0xa8(%rdi), %rax
movq %rax, 0x50(%rsp)
leaq -0x1c13(%rip), %r15     # 0x41e2
movq 0x48(%rsp), %rsi
movq 0xf0(%rsi), %rax
movq %rax, %rcx
subq 0xd0(%rsi), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,8), %rax
movq 0xc8(%rsi), %rcx
movq 0xd8(%rsi), %rdx
subq 0xe0(%rsi), %rdx
sarq $0x3, %rdx
movabsq $0x6db6db6db6db6db7, %rdi # imm = 0x6DB6DB6DB6DB6DB7
imulq %rdi, %rdx
addq %rax, %rdx
subq 0xb8(%rsi), %rcx
sarq $0x3, %rcx
imulq %rdi, %rcx
addq %rdx, %rcx
cmpq %rbx, %rcx
ja 0x5e6b
movq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x79e0
jmp 0x5df5
movq %r12, 0x190(%rsp)
movq 0x48(%rsp), %rax
leaq 0xb8(%rax), %rcx
movq %rcx, 0xa0(%rsp)
leaq 0xf8(%rax), %r15
leaq -0x1cb3(%rip), %r12     # 0x41e2
movq 0x48(%rsp), %rdi
movq 0x140(%rdi), %rax
movq %rax, %rcx
subq 0x120(%rdi), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
movq 0x128(%rdi), %rdx
subq 0x130(%rdi), %rdx
leaq (%rcx,%rcx,8), %rax
sarq $0x3, %rdx
movabsq $0x6db6db6db6db6db7, %r8 # imm = 0x6DB6DB6DB6DB6DB7
imulq %r8, %rdx
addq %rax, %rdx
movq 0x118(%rdi), %rax
subq 0x108(%rdi), %rax
sarq $0x3, %rax
imulq %r8, %rax
addq %rdx, %rax
movq 0xf0(%rdi), %rcx
movq %rcx, %rdx
subq 0xd0(%rdi), %rdx
sarq $0x3, %rdx
cmpq $0x1, %rcx
adcq $-0x1, %rdx
leaq (%rdx,%rdx,8), %rcx
movq 0xc8(%rdi), %rdx
movq 0xd8(%rdi), %rsi
subq 0xe0(%rdi), %rsi
sarq $0x3, %rsi
imulq %r8, %rsi
addq %rcx, %rsi
subq 0xb8(%rdi), %rdx
sarq $0x3, %rdx
imulq %r8, %rdx
addq %rsi, %rdx
cmpq %rdx, %rax
jae 0x5f5f
movq %r15, %rdi
movq %r12, %rsi
callq 0x79e0
jmp 0x5e95
movl %ebp, 0xac(%rsp)
leaq 0x6f(%rsp), %rax
movb $0x0, (%rax)
movabsq $-0x10000000000000, %rcx # imm = 0xFFF0000000000000
leaq 0x290(%rsp), %rdx
movq %rcx, (%rdx)
xorpd %xmm0, %xmm0
leaq 0x70(%rsp), %rcx
movapd %xmm0, (%rcx)
movq %r14, 0xc0(%rsp)
leaq 0x1e0(%rsp), %rsi
movq %rsi, 0xc8(%rsp)
movq %rax, 0xd0(%rsp)
movq %rdx, 0xd8(%rsp)
movq %rcx, 0xe0(%rsp)
movq 0x48(%rsp), %rax
movq %rax, 0xe8(%rsp)
movq 0xf01c(%rip), %r15      # 0x14ff0
leaq 0x9345(%rip), %rsi      # 0xf320
movl $0xa, %edx
movq %r15, %rdi
callq 0x2180
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0xefea(%rip), %rdi      # 0x14ff0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %r13, 0x198(%rsp)
movq 0x48(%rsp), %rax
leaq 0x108(%rax), %r12
xorl %ebp, %ebp
leaq 0x1b8(%rsp), %r13
movq 0x48(%rsp), %rsi
movq 0x140(%rsi), %rax
movq %rax, %rcx
subq 0x120(%rsi), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,8), %rax
movq 0x118(%rsi), %rcx
movq 0x128(%rsi), %rdx
subq 0x130(%rsi), %rdx
sarq $0x3, %rdx
movabsq $0x6db6db6db6db6db7, %rdi # imm = 0x6DB6DB6DB6DB6DB7
imulq %rdi, %rdx
addq %rax, %rdx
subq 0x108(%rsi), %rcx
sarq $0x3, %rcx
imulq %rdi, %rcx
addq %rdx, %rcx
cmpq %rbp, %rcx
jbe 0x6260
movq %r12, %rdi
movq %rbp, %rsi
callq 0xa520
movq (%rax), %rcx
cmpq 0x8(%rax), %rcx
je 0x6258
movq %r12, %rdi
movq %rbp, %rsi
callq 0xa520
movq (%rax), %rcx
movq 0x10(%rcx), %rdx
movq %rdx, 0x98(%rsp)
testq %rdx, %rdx
je 0x60f2
movl 0x8(%rdx), %eax
testl %eax, %eax
je 0x60e6
leal 0x1(%rax), %esi
lock
cmpxchgl %esi, 0x8(%rdx)
jne 0x60d6
jmp 0x60f2
movq $0x0, 0x98(%rsp)
movq 0x98(%rsp), %rax
testq %rax, %rax
je 0x6109
movl 0x8(%rax), %eax
testl %eax, %eax
sete %al
jmp 0x610b
movb $0x1, %al
testb %al, %al
jne 0x6115
movq 0x8(%rcx), %rbx
jmp 0x6117
xorl %ebx, %ebx
movq %rbx, 0x90(%rsp)
testq %rbx, %rbx
je 0x6195
leaq 0x280(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
leaq 0x90(%rsp), %rdx
callq 0x8686
movq 0x288(%rsp), %rdi
testq %rdi, %rdi
je 0x6153
callq 0x7136
movq 0x48(%rsp), %rax
movq 0x80(%rax), %r15
movq 0x90(%rsp), %rcx
movq 0x98(%rsp), %rax
movq %rcx, 0xb0(%rsp)
movq %rax, 0xb8(%rsp)
testq %rax, %rax
je 0x61b1
movq 0xee35(%rip), %rcx      # 0x14fc0
cmpb $0x0, (%rcx)
je 0x61ad
incl 0x8(%rax)
jmp 0x61b1
movq %r12, %rdi
movq %rbp, %rsi
callq 0xa520
movq %rax, %rdi
callq 0x85f6
jmp 0x623d
lock
incl 0x8(%rax)
movl (%r14), %edx
movq %r13, %rdi
leaq 0xb0(%rsp), %rsi
callq 0x3f30
addq $-0x10, %r15
movq 0x48(%rsp), %rdx
movl 0x148(%rdx), %r8d
movupd 0xc0(%rsp), %xmm0
movupd 0xd0(%rsp), %xmm1
movups 0xe0(%rsp), %xmm2
movups %xmm2, 0x20(%rsp)
movupd %xmm1, 0x10(%rsp)
movupd %xmm0, (%rsp)
movq %r15, %rdi
movq %r13, %rsi
movq 0x50(%rsp), %rcx
callq 0x89b3
movq 0x1b8(%rsp), %rdi
testq %rdi, %rdi
je 0x622b
movq 0x1c8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2170
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0x623d
callq 0x7136
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x624f
callq 0x7136
testq %rbx, %rbx
je 0x609c
incq %rbp
jmp 0x6031
movq 0xed89(%rip), %r15      # 0x14ff0
leaq 0x90bd(%rip), %rsi      # 0xf32b
movl $0xf, %edx
movq %r15, %rdi
callq 0x2180
movq 0x198(%rsp), %r13
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0xed4f(%rip), %rdi      # 0x14ff0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl (%r14), %edx
movq 0x48(%rsp), %rsi
movl 0x148(%rsi), %r9d
movq 0x80(%rsi), %rax
addq $-0x10, %rax
movslq 0xac(%rsp), %rcx
movupd 0xc0(%rsp), %xmm0
movupd 0xd0(%rsp), %xmm1
movups 0xe0(%rsp), %xmm2
movups %xmm2, 0x30(%rsp)
movupd %xmm1, 0x20(%rsp)
movupd %xmm0, 0x10(%rsp)
movq %rcx, 0x8(%rsp)
movq %rax, (%rsp)
movq 0x50(%rsp), %rdi
movl $0x8, %ecx
movl %r13d, %r8d
callq 0x8d20
movq 0x70(%rsp), %rax
testq %rax, %rax
je 0x63c6
movq %rax, 0x1d0(%rsp)
movq 0x78(%rsp), %rax
movq %rax, 0x1d8(%rsp)
testq %rax, %rax
je 0x6375
movq 0xec7b(%rip), %rcx      # 0x14fc0
cmpb $0x0, (%rcx)
je 0x6371
incl 0x8(%rax)
jmp 0x6375
movq 0x48(%rsp), %rbx
leaq 0xa8(%rbx), %rdi
callq 0x7fea
leaq 0xf8(%rbx), %rdi
callq 0x7fea
jmp 0x569d
lock
incl 0x8(%rax)
movl (%r14), %edx
incl %edx
leaq 0x90(%rsp), %rdi
leaq 0x1d0(%rsp), %rbx
movq %rbx, %rsi
callq 0x3e7e
movq 0x8(%rbx), %rdi
testq %rdi, %rdi
je 0x63a0
callq 0x7136
movq 0x90(%rsp), %rax
movq 0x98(%rsp), %rdi
movq 0xb4(%rax), %rax
movq %rax, 0x58(%rsp)
testq %rdi, %rdi
je 0x63c6
callq 0x7136
testl %r13d, %r13d
jle 0x64b7
movl %r13d, %eax
movq %rax, 0x50(%rsp)
xorl %ebx, %ebx
movq 0xec10(%rip), %r15      # 0x14ff0
movabsq $-0x5555555555555555, %r13 # imm = 0xAAAAAAAAAAAAAAAB
movl $0x9, %edx
movq %r15, %rdi
leaq 0x8f42(%rip), %rsi      # 0xf33b
callq 0x2180
movq %r15, %rdi
movl %ebx, %esi
callq 0x2210
movq %rax, %rbp
movl $0x7, %edx
movq %rax, %rdi
leaq 0x8f2b(%rip), %rsi      # 0xf345
callq 0x2180
movq 0xa0(%rsp), %rdi
movq %rbx, %rsi
callq 0xa520
movq 0x8(%rax), %rsi
subq (%rax), %rsi
sarq $0x3, %rsi
imulq %r13, %rsi
movq %rbp, %rdi
callq 0x20f0
movq %rax, %rbp
movl $0x8, %edx
movq %rax, %rdi
leaq 0x8ef5(%rip), %rsi      # 0xf34d
callq 0x2180
movq %r12, %rdi
movq %rbx, %rsi
callq 0xa520
movq 0x8(%rax), %rsi
subq (%rax), %rsi
sarq $0x3, %rsi
imulq %r13, %rsi
movq %rbp, %rdi
callq 0x20f0
movq %rax, %rbp
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbp, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
incq %rbx
cmpq %rbx, 0x50(%rsp)
jne 0x63ea
movq 0xeb32(%rip), %rbx      # 0x14ff0
leaq 0x8e91(%rip), %rsi      # 0xf356
movl $0x4, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0xeb00(%rip), %rdi      # 0x14ff0
callq 0x2030
movq %rax, %rdi
callq 0x2100
xorl %ebx, %ebx
movq 0x48(%rsp), %rsi
movq 0x140(%rsi), %rax
movq %rax, %rcx
subq 0x120(%rsi), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,8), %rax
movq 0x118(%rsi), %rcx
movq 0x128(%rsi), %rdx
subq 0x130(%rsi), %rdx
sarq $0x3, %rdx
movabsq $0x6db6db6db6db6db7, %rdi # imm = 0x6DB6DB6DB6DB6DB7
imulq %rdi, %rdx
addq %rax, %rdx
subq 0x108(%rsi), %rcx
sarq $0x3, %rcx
imulq %rdi, %rcx
addq %rdx, %rcx
cmpq %rbx, %rcx
jbe 0x6723
movq %r12, %rdi
movq %rbx, %rsi
callq 0xa520
movq (%rax), %rcx
cmpq 0x8(%rax), %rcx
je 0x671b
movq %r12, %rdi
movq %rbx, %rsi
callq 0xa520
movq (%rax), %rcx
movq 0x10(%rcx), %r15
testq %r15, %r15
je 0x65b1
movl 0x8(%r15), %eax
testl %eax, %eax
je 0x65ae
leal 0x1(%rax), %edx
lock
cmpxchgl %edx, 0x8(%r15)
jne 0x659d
jmp 0x65b1
xorl %r15d, %r15d
testq %r15, %r15
je 0x65c1
movl 0x8(%r15), %eax
testl %eax, %eax
sete %al
jmp 0x65c3
movb $0x1, %al
testb %al, %al
movq %rbx, 0xa0(%rsp)
jne 0x65d5
movq 0x8(%rcx), %r14
jmp 0x65d8
xorl %r14d, %r14d
movl (%r14), %r13d
movl 0x8(%r14), %eax
addl $0x14, %eax
movl 0x204(%rsp), %ecx
movl %ecx, %edx
shrl $0x1f, %edx
addl %ecx, %edx
sarl %edx
movl $0x3c, %esi
subl %edx, %esi
cmpl $0x50, %ecx
movl $0x14, %ecx
cmovgel %ecx, %esi
movq 0x60(%rsp), %rcx
movl (%rcx), %ebp
cmpl %esi, %eax
cmovgl %eax, %esi
movl 0xbc(%r14), %eax
movl %eax, 0x50(%rsp)
leal (%rsi,%rsi,4), %ebx
addl 0x200(%rsp), %ebx
movl $0x7, %edx
movq 0xe9bf(%rip), %rdi      # 0x14ff0
leaq 0x8d23(%rip), %rsi      # 0xf35b
callq 0x2180
subl %ebp, %r13d
movq 0xe9a9(%rip), %rdi      # 0x14ff0
movl %r13d, %esi
callq 0x2210
movq %rax, %r13
movl $0x2, %edx
movq %rax, %rdi
leaq 0x8ce1(%rip), %rsi      # 0xf342
callq 0x2180
movl 0xc0(%r14), %esi
movq %r13, %rdi
callq 0x2210
movq %rax, %r13
movl $0x2, %edx
movq %rax, %rdi
leaq 0x8c81(%rip), %rsi      # 0xf308
callq 0x2180
movl 0xbc(%r14), %esi
movq %r13, %rdi
callq 0x2210
movq %rax, %r13
movl $0x2, %edx
movq %rax, %rdi
leaq 0x8c5e(%rip), %rsi      # 0xf30b
callq 0x2180
xorl %eax, %eax
cmpl 0x50(%rsp), %ebx
setl %al
leaq 0x8cb5(%rip), %rsi      # 0xf377
leaq 0x8c9a(%rip), %rcx      # 0xf363
cmovlq %rcx, %rsi
leaq (%rax,%rax,4), %rdx
movq %r13, %rdi
callq 0x2180
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r13, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
testq %r15, %r15
movq 0x60(%rsp), %r14
movq 0xa0(%rsp), %rbx
je 0x671b
movq %r15, %rdi
callq 0x7136
incq %rbx
jmp 0x64ff
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x6732
callq 0x7136
movq 0xe8b7(%rip), %rdi      # 0x14ff0
leaq 0x8c29(%rip), %rsi      # 0xf369
movl $0xe, %edx
callq 0x2180
callq 0x2040
subq 0x190(%rsp), %rax
movabsq $0x431bde82d7b634db, %rcx # imm = 0x431BDE82D7B634DB
imulq %rcx
movq %rdx, %rsi
shrq $0x3f, %rsi
sarq $0x12, %rdx
addq %rdx, %rsi
movq 0xe877(%rip), %rbx      # 0x14ff0
movq %rbx, %rdi
callq 0x2070
movq %rax, %r15
leaq 0x8b92(%rip), %rsi      # 0xf31d
movl $0x2, %edx
movq %rax, %rdi
callq 0x2180
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r15, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
callq 0x2040
movq %rax, 0x50(%rsp)
movl 0x4(%r14), %ecx
movl $0x3, %eax
cmpl $0x15f90, %ecx          # imm = 0x15F90
jg 0x67f2
movl $0x2, %eax
cmpl $0xea60, %ecx           # imm = 0xEA60
jg 0x67f2
xorl %eax, %eax
cmpl $0x7531, %ecx           # imm = 0x7531
setge %al
cmpl $0x4e21, %ecx           # imm = 0x4E21
setl %cl
cmpl $0x6, 0xac(%r14)
setge %dl
orb %cl, %dl
testl %eax, %eax
sete %cl
orb %dl, %cl
jne 0x6b60
movl %eax, %r13d
xorl %ebp, %ebp
movq 0x48(%rsp), %rsi
movq 0x140(%rsi), %rax
movq %rax, %rcx
subq 0x120(%rsi), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
leaq (%rcx,%rcx,8), %rax
movq 0x118(%rsi), %rcx
movq 0x128(%rsi), %rdx
subq 0x130(%rsi), %rdx
sarq $0x3, %rdx
movabsq $0x6db6db6db6db6db7, %rdi # imm = 0x6DB6DB6DB6DB6DB7
imulq %rdi, %rdx
addq %rax, %rdx
subq 0x108(%rsi), %rcx
sarq $0x3, %rcx
imulq %rdi, %rcx
addq %rdx, %rcx
cmpq %rbp, %rcx
jbe 0x6b37
movq %r12, %rdi
movq %rbp, %rsi
callq 0xa520
movq (%rax), %rcx
cmpq 0x8(%rax), %rcx
je 0x6b37
movq %r12, %rdi
movq %rbp, %rsi
callq 0xa520
movq (%rax), %rcx
movq 0x10(%rcx), %rdx
movq %rdx, 0xc8(%rsp)
testq %rdx, %rdx
je 0x68db
movl 0x8(%rdx), %eax
testl %eax, %eax
je 0x68cf
leal 0x1(%rax), %esi
lock
cmpxchgl %esi, 0x8(%rdx)
jne 0x68bf
jmp 0x68db
movq $0x0, 0xc8(%rsp)
movq 0xc8(%rsp), %rax
testq %rax, %rax
je 0x68f2
movl 0x8(%rax), %eax
testl %eax, %eax
sete %al
jmp 0x68f4
movb $0x1, %al
testb %al, %al
jne 0x68fe
movq 0x8(%rcx), %rax
jmp 0x6900
xorl %eax, %eax
movq %rax, 0xc0(%rsp)
movl 0x58(%rsp), %ecx
cmpl 0xb4(%rax), %ecx
jne 0x692a
movl 0xb8(%rax), %ecx
movl $0x21, %r14d
cmpl %ecx, 0x5c(%rsp)
je 0x6b1a
movl 0x8(%rax), %eax
movq 0x1e0(%rsp), %rcx
movslq (%rcx), %rcx
imulq $0x66666667, %rcx, %rcx # imm = 0x66666667
movq %rcx, %rdx
shrq $0x3f, %rdx
sarq $0x21, %rcx
addl %edx, %ecx
cmpl $0x15, %ecx
movl $0x14, %edx
cmovll %edx, %ecx
movl $0x23, %r14d
cmpl $0x15, %eax
jl 0x6b1a
addl %ecx, %eax
addl $0xa, %eax
testl %eax, %eax
jg 0x6b1a
movl $0x13, %edx
movq %rbx, %rdi
leaq 0x89f6(%rip), %rsi      # 0xf378
callq 0x2180
leal 0x1(%rbp), %esi
movq %rbx, %rdi
callq 0x2210
movq %rax, %r15
movl $0x2, %edx
movq %rax, %rdi
leaq 0x899e(%rip), %rsi      # 0xf342
callq 0x2180
movq 0xc0(%rsp), %rax
movl 0xc0(%rax), %esi
movq %r15, %rdi
callq 0x2210
movq %rax, %r15
movl $0x2, %edx
movq %rax, %rdi
leaq 0x8937(%rip), %rsi      # 0xf308
callq 0x2180
movq 0xc0(%rsp), %rax
movl 0xbc(%rax), %esi
movq %r15, %rdi
callq 0x2210
movq %rax, %r15
movl $0x2, %edx
movq %rax, %rdi
leaq 0x890d(%rip), %rsi      # 0xf30b
callq 0x2180
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %r15, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x48(%rsp), %rsi
movq 0x98(%rsi), %rdi
addq $-0x10, %rdi
movl $0x78, %edx
movl $0xa, %ecx
movq 0x60(%rsp), %r14
movq %r14, %r8
leaq 0xc0(%rsp), %r9
callq 0x9175
movq 0xc0(%rsp), %rcx
movq 0xc8(%rsp), %rax
movq %rcx, 0x1a8(%rsp)
movq %rax, 0x1b0(%rsp)
testq %rax, %rax
je 0x6a93
movq 0xe53b(%rip), %rcx      # 0x14fc0
cmpb $0x0, (%rcx)
je 0x6a8f
incl 0x8(%rax)
jmp 0x6a93
lock
incl 0x8(%rax)
movl (%r14), %edx
incl %edx
leaq 0x70(%rsp), %rdi
leaq 0x1a8(%rsp), %rsi
callq 0x3e7e
movq 0x70(%rsp), %rax
movq 0x78(%rsp), %rdi
movq 0xb4(%rax), %rax
movq %rax, 0x58(%rsp)
testq %rdi, %rdi
je 0x6aca
callq 0x7136
movq 0x1b0(%rsp), %rdi
testq %rdi, %rdi
je 0x6adc
callq 0x7136
movl $0x4, %edx
movq %rbx, %rdi
leaq 0x88a1(%rip), %rsi      # 0xf38c
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
xorl %r14d, %r14d
movq 0xc8(%rsp), %rdi
testq %rdi, %rdi
je 0x6b2c
callq 0x7136
testl %r14d, %r14d
je 0x6b37
cmpl $0x23, %r14d
jne 0x6b60
incq %rbp
cmpq %r13, %rbp
jne 0x681a
jmp 0x6b60
movq %rax, %r14
cmpl $0x1, %edx
jne 0x6fcb
movq %r14, %rdi
callq 0x2090
callq 0x21f0
jmp 0x6b17
movq 0xe489(%rip), %rdi      # 0x14ff0
leaq 0x8823(%rip), %rsi      # 0xf391
movl $0x15, %edx
callq 0x2180
callq 0x2040
subq 0x50(%rsp), %rax
movabsq $0x431bde82d7b634db, %rcx # imm = 0x431BDE82D7B634DB
imulq %rcx
movq %rdx, %rsi
shrq $0x3f, %rsi
sarq $0x12, %rdx
addq %rdx, %rsi
movq 0xe44c(%rip), %rdi      # 0x14ff0
callq 0x2070
movq %rax, %rbx
leaq 0x876a(%rip), %rsi      # 0xf31d
movl $0x2, %edx
movq %rax, %rdi
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x60(%rsp), %r14
movslq (%r14), %rax
movq 0x48(%rsp), %rcx
movq (%rcx), %rcx
leaq (%rax,%rax,8), %rax
movq (%rcx,%rax), %rdi
movl 0x8(%r14), %edx
movzbl 0x8(%rcx,%rax), %esi
callq 0x284d
movq %rax, 0x70(%rsp)
movb %dl, 0x78(%rsp)
cmpl $0xdeadbeef, 0x58(%rsp) # imm = 0xDEADBEEF
jne 0x6d77
cmpl $-0x1, 0x5c(%rsp)
jne 0x6d77
movq 0xe3ba(%rip), %rbx      # 0x14ff0
leaq 0x876a(%rip), %rsi      # 0xf3a7
movl $0x10, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0xe388(%rip), %rdi      # 0x14ff0
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
movl $0xfffffffe, %ebx       # imm = 0xFFFFFFFE
leaq 0x70(%rsp), %r15
leaq 0x90(%rsp), %r12
movabsq $0x100000000, %r14      # imm = 0x100000000
movl %ebx, %ebx
movl $0x4, %r13d
movq %rbx, 0x50(%rsp)
movq %rbx, 0x90(%rsp)
leaq 0xc0(%rsp), %rdi
movq 0x88(%rsp), %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x2b1f
movl 0x164(%rsp), %eax
cmpl %eax, %ebp
jg 0x6cd8
movq %rbx, 0x58(%rsp)
movl %eax, %ebp
addq %r14, %rbx
decq %r13
jne 0x6ca3
jmp 0x6d0b
movq %rax, %rdi
cmpl $0x3, %edx
jne 0x6cf6
callq 0x2090
callq 0x21f0
jmp 0x6cd8
cmpl $0x2, %edx
jne 0x6fc0
callq 0x2090
callq 0x21f0
jmp 0x6cd8
movq 0x50(%rsp), %rbx
incl %ebx
cmpl $0xa, %ebx
jne 0x6c96
cmpl $0xdeadbeef, 0x58(%rsp) # imm = 0xDEADBEEF
movq 0x60(%rsp), %r14
jne 0x6d77
cmpl $-0x1, 0x5c(%rsp)
jne 0x6d77
movq 0xe2b8(%rip), %rbx      # 0x14ff0
leaq 0x8679(%rip), %rsi      # 0xf3b8
movl $0x10, %edx
movq %rbx, %rdi
callq 0x2180
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq 0xe286(%rip), %rdi      # 0x14ff0
callq 0x2030
movq %rax, %rdi
callq 0x2100
leaq 0x70(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0x2931
testb %al, %al
je 0x6ebd
movq 0x48(%rsp), %rbx
movq 0x20(%rbx), %rsi
cmpq 0x28(%rbx), %rsi
je 0x6db7
movl $0x150, %edx            # imm = 0x150
movq %rsi, %rdi
movq %r14, %rsi
callq 0x2120
addq $0x150, 0x20(%rbx)      # imm = 0x150
jmp 0x6dc7
movq 0x178(%rsp), %rdi
movq %r14, %rdx
callq 0xba3e
movq 0x48(%rsp), %rcx
movq 0x38(%rcx), %rsi
cmpq 0x40(%rcx), %rsi
je 0x6de5
movq 0x58(%rsp), %rax
movq %rax, (%rsi)
addq $0x8, 0x38(%rcx)
jmp 0x6df3
leaq 0x30(%rcx), %rdi
leaq 0x58(%rsp), %rdx
callq 0xe3cc
leaq 0xc0(%rsp), %rdi
leaq 0x70(%rsp), %rdx
leaq 0x58(%rsp), %rcx
movq 0x88(%rsp), %rsi
callq 0x2b1f
movq 0x48(%rsp), %rbx
leaq 0x60(%rbx), %rdi
leaq 0x164(%rsp), %rsi
callq 0xbbaa
movq 0x50(%rbx), %rsi
cmpq %rsi, 0x48(%rbx)
je 0x6e37
movl -0x4(%rsi), %eax
jmp 0x6e39
xorl %eax, %eax
movq 0x48(%rsp), %rbx
movq 0x68(%rbx), %rcx
addl -0x8(%rcx), %eax
movl %eax, 0xc0(%rsp)
cmpq 0x58(%rbx), %rsi
je 0x6e5e
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x50(%rbx)
jmp 0x6e73
leaq 0xc0(%rsp), %rdx
movq 0x180(%rsp), %rdi
callq 0xbcb6
movq 0x80(%rbx), %rdi
addq $-0x10, %rdi
movq 0x58(%rsp), %rsi
callq 0x4072
movq 0x80(%rbx), %rax
movslq 0x58(%rsp), %rcx
shlq $0x6, %rcx
addq -0x10(%rax), %rcx
movslq 0x5c(%rsp), %rax
shlq $0x4, %rax
leaq (%rax,%rcx), %rsi
addq $0x1b8, %rsi            # imm = 0x1B8
movq 0x188(%rsp), %rdi
callq 0x8060
movq 0xe12c(%rip), %rdi      # 0x14ff0
leaq 0x84fe(%rip), %rsi      # 0xf3c9
movl $0xf, %edx
callq 0x2180
callq 0x2040
subq 0x1a0(%rsp), %rax
movabsq $0x431bde82d7b634db, %rcx # imm = 0x431BDE82D7B634DB
imulq %rcx
movq %rdx, %rsi
shrq $0x3f, %rsi
sarq $0x12, %rdx
addq %rdx, %rsi
movq 0xe0ec(%rip), %rdi      # 0x14ff0
callq 0x2070
movq %rax, %rbx
leaq 0x840a(%rip), %rsi      # 0xf31d
movl $0x2, %edx
movq %rax, %rdi
callq 0x2180
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2140
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x6f64
movq 0x1f0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2170
movq 0x58(%rsp), %rax
addq $0x298, %rsp            # imm = 0x298
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x6fc8
jmp 0x6fbd
jmp 0x6fbd
jmp 0x6fbd
jmp 0x6f89
jmp 0x6fe0
jmp 0x6f89
movq %rax, %r14
movq 0xc8(%rsp), %rdi
testq %rdi, %rdi
je 0x7086
callq 0x7136
jmp 0x7086
jmp 0x6fbd
jmp 0x6fbd
jmp 0x6fbd
jmp 0x6fc8
jmp 0x7040
jmp 0x6fe0
jmp 0x6fe0
jmp 0x7040
movq %rax, %rdi
movq %rdi, %r14
jmp 0x7069
movq %rax, %r14
movq 0xc8(%rsp), %rdi
jmp 0x705f
jmp 0x7040
jmp 0x6ff5
jmp 0x7040
jmp 0x7040
movq %rax, %r14
leaq 0xc0(%rsp), %rdi
callq 0x7236
jmp 0x7086
movq %rax, %r14
jmp 0x705a
movq %rax, %r14
testq %r15, %r15
je 0x705a
movq %r15, %rdi
jmp 0x7055
movq %rax, %r14
movq 0x1b8(%rsp), %rdi
testq %rdi, %rdi
je 0x702c
movq 0x1c8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2170
jmp 0x702c
movq %rax, %r14
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0x7048
callq 0x7136
jmp 0x7048
movq %rax, %r14
jmp 0x7069
movq %rax, %r14
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x705a
callq 0x7136
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x7069
callq 0x7136
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x7086
movq 0x1f0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2170
movq %r14, %rdi
callq 0x2230