// File: /workspace/github_cpp_makefile_star2_O2/fjamour[P]icentral/src/qube.cc
// Function: muc_t::i_iteration_2(unsigned int, unsigned int, unsigned int, int, int, std::tr1::unordered_map<unsigned int, double, std::tr1::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, double>>>&)
void muc_t::i_iteration_2(node_id_t s,
                        node_id_t src,
                        node_id_t dst,
                        int d_src,
                        int d_dst,
                        tr1_map_t(double)& bc_map)
{
        vector<vector<node_id_t> >&  P = muc_fast_subgraph.P; 
        vector<int>&                 path_cnt_map = muc_fast_subgraph.path_cnt_vec;
        vector<int>&                 path_cnt_inc_map = muc_fast_subgraph.path_cnt_inc_vec;
        vector<int>&                 dist_map = muc_fast_subgraph.dist_vec;
        vector<double>&              pair_dep_map = muc_fast_subgraph.pair_dep_vec;
        vector<double>&              sigma_t_map = muc_fast_subgraph.sigma_t_map;
        vector<bool>&                visited_vec = muc_fast_subgraph.visited_vec;
        queue<node_id_t>&            Q = muc_fast_subgraph.Q;
        vector<node_id_t>            S;
        
        muc_fast_subgraph.init_maps();           

        path_cnt_map[s] = 1;
        dist_map[s] = 0;
        Q.push(s);
        while(!Q.empty()) {
            node_id_t v_i = Q.front(); Q.pop();
            S.push_back(v_i);
            for(int i = 0; i < muc_fast_subgraph.nodes_vec[v_i].size(); ++i) {
                node_id_t v_n = muc_fast_subgraph.nodes_vec[v_i][i];
                if(dist_map[v_n] < 0) {
                    Q.push(v_n);
                    dist_map[v_n] = dist_map[v_i] + 1;
                }
                if(dist_map[v_n] == dist_map[v_i] + 1) {
                    path_cnt_map[v_n] = path_cnt_map[v_n] + path_cnt_map[v_i];
                    P[v_n].push_back(v_i);
                }
            }
        }
        
        /*
         * steps:
         * 1. do the reverse BFS and subtract the olds
         * 2. compute the new counts
         * 3. fix the order of S
         * 4. add the new increments
         */
        //RBFS to subtract old pair dependency
        for(int i = S.size()-1; i >= 0; --i) {
            node_id_t v_n = S[i];
            if(   tmp_conn_vertex_map.find(s) != tmp_conn_vertex_map.end()
               && tmp_conn_vertex_map.find(v_n) != tmp_conn_vertex_map.end()
               && s != v_n) {
                int VG_s, VG_n;
                VG_s = tmp_subgraph_map[s].size();
                VG_n = tmp_subgraph_map[v_n].size();
                int c_t = VG_s*VG_n;
                sigma_t_map[v_n] =  sigma_t_map[v_n] + c_t;
                /*this guy must not change!*/
                //bc_map[v_n] = bc_map[v_n] - c_t;
            }
            for(int i = 0; i < P[v_n].size(); ++i) {
                node_id_t v_p = P[v_n][i];
                double sp_sn = ((double)path_cnt_map[v_p]/path_cnt_map[v_n]);
                pair_dep_map[v_p] = pair_dep_map[v_p] + sp_sn*(1+pair_dep_map[v_n]);
                if(tmp_conn_vertex_map.find(s) != tmp_conn_vertex_map.end()) {
                    sigma_t_map[v_p] = sigma_t_map[v_p] + sigma_t_map[v_n]*sp_sn;
                    
                    node_id_t new_v_p = muc_fast_subgraph.inout_label_map[v_p];
                    bc_map[new_v_p] = bc_map[new_v_p] - sigma_t_map[v_n]*sp_sn/2.0;
                }
            }
            if(s != v_n) {
                node_id_t new_v_n = muc_fast_subgraph.inout_label_map[v_n];
                bc_map[new_v_n] = bc_map[new_v_n] - pair_dep_map[v_n]/2.0;
            }
            if(tmp_conn_vertex_map.find(s) != tmp_conn_vertex_map.end()) {
                int VG_s = tmp_subgraph_map[s].size();
                
                node_id_t new_v_n = muc_fast_subgraph.inout_label_map[v_n];
                bc_map[new_v_n] = bc_map[new_v_n] - pair_dep_map[v_n]*VG_s;
            }
        }
                
        //Compute new path counts and paths
        Q.push(dst);
        dist_map[dst] = dist_map[src] + 1;
        P[dst].clear();
        P[dst].push_back(src);
        path_cnt_inc_map[dst] = path_cnt_map[src];
        path_cnt_map[dst] = path_cnt_inc_map[dst];
        visited_vec[dst] = true;
        
        while (!Q.empty()) {
            node_id_t v = Q.front();
            Q.pop();
            vector<node_id_t> nbr_vec = muc_fast_subgraph.get_nbrs(v);
            for (int nbr_idx = 0; nbr_idx < nbr_vec.size(); ++nbr_idx) {
                node_id_t w = nbr_vec[nbr_idx];
                if (dist_map[w] > (dist_map[v] + 1)) {
                    dist_map[w] = dist_map[v] + 1;
                    P[w].clear();
                    P[w].push_back(v);
                    path_cnt_map[w] = 0;
                    path_cnt_inc_map[w] = path_cnt_inc_map[v];
                    path_cnt_map[w] += path_cnt_inc_map[w];
                    if(!visited_vec[w]) {
                        visited_vec[w] = true;
                        Q.push(w);
                    }
                } else if (dist_map[w] == (dist_map[v] + 1)) {
                    path_cnt_inc_map[w] += path_cnt_inc_map[v];
                    path_cnt_map[w] += path_cnt_inc_map[v];
                    if(find(P[w].begin(), P[w].end(), v) == P[w].end()) {
                        P[w].push_back(v);
                    }
                    if(!visited_vec[w]) {
                        visited_vec[w] = true;
                        Q.push(w);
                    }
                }
            }
        }
        
    
        //fix order of S
        //IMP::THIS CAN BE MADE MUCH BETTER!
        //HEAP FOR EXAMPLE
        //EVEN THE SWAPPING CAN BE DONE MORE EFFICIENTLY
        //for now it's not a bottleneck
        for(int i = 1; i < S.size(); ++i) {
            if(dist_map[S[i-1]] > dist_map[S[i]]) {
                int j = i;
                while(dist_map[S[j-1]] > dist_map[S[j]]) {
                    node_id_t tmp = S[j-1];
                    S[j-1] = S[j];
                    S[j] = tmp;
                    --j;
                }
            }
        }
        
        muc_fast_subgraph.i_fill_map<double>(pair_dep_map, 0);
        muc_fast_subgraph.i_fill_map<double>(sigma_t_map, 0);
        //RBFS to add the new pair dependencies
        for(int i = S.size()-1; i >= 0; --i) {
            node_id_t v_n = S[i];
            if(   tmp_conn_vertex_map.find(s) != tmp_conn_vertex_map.end()
               && tmp_conn_vertex_map.find(v_n) != tmp_conn_vertex_map.end()
               && s != v_n) {
                int VG_s, VG_n;
                VG_s = tmp_subgraph_map[s].size();
                VG_n = tmp_subgraph_map[v_n].size();
                int c_t = VG_s*VG_n;
                sigma_t_map[v_n] =  sigma_t_map[v_n] + c_t;
                /*this guy must not change!*/
                //bc_map[v_n] = bc_map[v_n] + c_t;
            }
            for(int i = 0; i < P[v_n].size(); ++i) {
                node_id_t v_p = P[v_n][i];
                double sp_sn = ((double)path_cnt_map[v_p]/path_cnt_map[v_n]);
                pair_dep_map[v_p] = pair_dep_map[v_p] + sp_sn*(1+pair_dep_map[v_n]);
                if(tmp_conn_vertex_map.find(s) != tmp_conn_vertex_map.end()) {
                    sigma_t_map[v_p] = sigma_t_map[v_p] + sigma_t_map[v_n]*sp_sn;
                    
                    node_id_t new_v_p = muc_fast_subgraph.inout_label_map[v_p];
                    bc_map[new_v_p] = bc_map[new_v_p] + sigma_t_map[v_n]*sp_sn/2.0;
                }
            }
            if(s != v_n) {
                node_id_t new_v_n = muc_fast_subgraph.inout_label_map[v_n];
                bc_map[new_v_n] = bc_map[new_v_n] + pair_dep_map[v_n]/2.0;
            }
            if(tmp_conn_vertex_map.find(s) != tmp_conn_vertex_map.end()) {
                int VG_s = tmp_subgraph_map[s].size();
                
                node_id_t new_v_n = muc_fast_subgraph.inout_label_map[v_n];
                bc_map[new_v_n] = bc_map[new_v_n] + pair_dep_map[v_n]*VG_s;
            }
        }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movl %esi, %ebp
movq %rdi, %rbx
movl %esi, 0xc(%rsp)
movl %edx, 0x4c(%rsp)
movl %ecx, 0x1c(%rsp)
leaq 0x310(%rdi), %r15
xorpd %xmm0, %xmm0
movapd %xmm0, 0x70(%rsp)
andq $0x0, 0x80(%rsp)
movq %r15, %rdi
callq 0x25fea
leaq 0x4b8(%rbx), %rdi
movl %ebp, %eax
movq 0x3b8(%rbx), %rcx
movl $0x1, (%rcx,%rax,4)
leaq 0xc(%rsp), %rsi
movl (%rsi), %eax
movq 0x3e8(%rbx), %rcx
andl $0x0, (%rcx,%rax,4)
movq %rdi, 0x60(%rsp)
callq 0x62da
leaq 0x400(%rbx), %rax
movq %rax, 0x58(%rsp)
leaq 0x448(%rbx), %rax
movq %rax, 0x68(%rsp)
leaq 0x478(%rbx), %rax
movq %rax, 0x40(%rsp)
leaq 0x70(%rsp), %r14
leaq 0x28(%rsp), %r12
leaq 0x4(%rsp), %r13
movq 0x4c8(%rbx), %rax
cmpq %rax, 0x4e8(%rbx)
je 0x22280
movl (%rax), %eax
movl %eax, 0x28(%rsp)
movq 0x60(%rsp), %rdi
callq 0x650e
movq %r14, %rdi
movq %r12, %rsi
callq 0x478c
xorl %ebp, %ebp
movl 0x28(%rsp), %eax
movq (%r15), %rdx
imulq $0x18, %rax, %rsi
movq (%rdx,%rsi), %rcx
movq 0x8(%rdx,%rsi), %rdx
subq %rcx, %rdx
sarq $0x2, %rdx
cmpq %rbp, %rdx
jbe 0x221b6
movl (%rcx,%rbp,4), %ecx
movl %ecx, 0x4(%rsp)
movq 0x3e8(%rbx), %rdx
movl (%rdx,%rcx,4), %esi
testl %esi, %esi
jns 0x2224b
movq 0x60(%rsp), %rdi
movq %r13, %rsi
callq 0x62da
movl 0x28(%rsp), %eax
movq 0x3e8(%rbx), %rdx
movl (%rdx,%rax,4), %eax
incl %eax
movl 0x4(%rsp), %ecx
movl %eax, (%rdx,%rcx,4)
movl 0x4(%rsp), %ecx
movl (%rdx,%rcx,4), %esi
movl 0x28(%rsp), %eax
movl (%rdx,%rax,4), %edx
incl %edx
cmpl %edx, %esi
jne 0x22278
movq 0x3b8(%rbx), %rdx
movl (%rdx,%rax,4), %eax
addl %eax, (%rdx,%rcx,4)
movl 0x4(%rsp), %eax
imulq $0x18, %rax, %rdi
addq 0x3a0(%rbx), %rdi
movq %r12, %rsi
callq 0x478c
incq %rbp
jmp 0x221e7
movq 0x78(%rsp), %rax
subq 0x70(%rsp), %rax
shrq $0x2, %rax
leaq 0x508(%rbx), %r13
leaq 0x538(%rbx), %rcx
movq %rcx, 0x50(%rsp)
movl %eax, %eax
movq %rax, 0xa0(%rsp)
leaq 0xc(%rsp), %r12
leaq 0x4(%rsp), %r14
movq %r15, 0x98(%rsp)
movq 0xa0(%rsp), %rax
decq %rax
testl %eax, %eax
js 0x225dc
movq %rax, 0xa0(%rsp)
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq 0x70(%rsp), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0x28(%rsp)
movq %r13, %rdi
movq %r12, %rsi
callq 0x22ed2
movq 0x510(%rbx), %rcx
movq 0x518(%rbx), %rdx
cmpq (%rcx,%rdx,8), %rax
je 0x2237f
movq %r13, %rdi
leaq 0x28(%rsp), %rsi
callq 0x22ed2
movq 0x510(%rbx), %rcx
movq 0x518(%rbx), %rdx
cmpq (%rcx,%rdx,8), %rax
je 0x2237f
movl 0xc(%rsp), %eax
cmpl 0x28(%rsp), %eax
je 0x2237f
movq 0x50(%rsp), %rdi
movq %r12, %rsi
callq 0x22dc4
movq %rax, %rdi
callq 0x176f6
movq %rax, %rbp
movq 0x50(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x22dc4
movq %rax, %rdi
callq 0x176f6
imull %ebp, %eax
movl 0x28(%rsp), %ecx
cvtsi2sd %eax, %xmm0
movq 0x68(%rsp), %rax
movq (%rax), %rax
addsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
xorl %ebp, %ebp
movl 0x28(%rsp), %eax
movq 0x3a0(%rbx), %rdx
imulq $0x18, %rax, %rsi
movq (%rdx,%rsi), %rcx
movq 0x8(%rdx,%rsi), %rdx
subq %rcx, %rdx
sarq $0x2, %rdx
cmpq %rbp, %rdx
jbe 0x224b0
movl (%rcx,%rbp,4), %r15d
movq 0x3b8(%rbx), %rcx
cvtsi2sdl (%rcx,%r15,4), %xmm1
cvtsi2sdl (%rcx,%rax,4), %xmm0
movq 0x400(%rbx), %rcx
divsd %xmm0, %xmm1
movsd (%rcx,%rax,8), %xmm0
addsd 0x5c69(%rip), %xmm0     # 0x28040
movsd %xmm1, 0x10(%rsp)
mulsd %xmm1, %xmm0
addsd (%rcx,%r15,8), %xmm0
movsd %xmm0, (%rcx,%r15,8)
movq %r13, %rdi
movq %r12, %rsi
callq 0x22ed2
movq 0x510(%rbx), %rcx
movq 0x518(%rbx), %rdx
cmpq (%rcx,%rdx,8), %rax
je 0x224a8
movq 0x448(%rbx), %rax
movl 0x28(%rsp), %ecx
movsd (%rax,%rcx,8), %xmm0
mulsd 0x10(%rsp), %xmm0
addsd (%rax,%r15,8), %xmm0
movsd %xmm0, (%rax,%r15,8)
movq 0x358(%rbx), %rax
movl (%rax,%r15,4), %eax
movl %eax, 0x4(%rsp)
movq 0xe0(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0xb00c
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movl 0x28(%rsp), %eax
movq 0x68(%rsp), %rcx
movq (%rcx), %rcx
movsd (%rcx,%rax,8), %xmm0
movsd %xmm0, 0x90(%rsp)
movq %r15, %rdi
movq %r14, %rsi
callq 0xb00c
movsd 0x10(%rsp), %xmm0
mulsd 0x90(%rsp), %xmm0
mulsd 0x5b9e(%rip), %xmm0     # 0x28038
movsd 0x20(%rsp), %xmm1
addsd %xmm0, %xmm1
movsd %xmm1, (%rax)
incq %rbp
jmp 0x22381
cmpl %eax, 0xc(%rsp)
movq 0xe0(%rsp), %r15
je 0x2251f
movq 0x358(%rbx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0x4(%rsp)
movq %r15, %rdi
movq %r14, %rsi
callq 0xb00c
movsd (%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movl 0x28(%rsp), %eax
movq 0x58(%rsp), %rcx
movq (%rcx), %rcx
movsd (%rcx,%rax,8), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %r15, %rdi
movq %r14, %rsi
callq 0xb00c
movsd 0x20(%rsp), %xmm1
mulsd 0x5b27(%rip), %xmm1     # 0x28038
movsd 0x10(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq %r13, %rdi
movq %r12, %rsi
callq 0x22ed2
movq 0x510(%rbx), %rcx
movq 0x518(%rbx), %rdx
cmpq (%rcx,%rdx,8), %rax
movq 0x98(%rsp), %r15
je 0x222bd
movq 0x50(%rsp), %rdi
movq %r12, %rsi
callq 0x22dc4
movq %rax, %rdi
callq 0x176f6
movq %rax, %rbp
movl 0x28(%rsp), %eax
movq 0x358(%rbx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0x4(%rsp)
movq 0xe0(%rsp), %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0xb00c
movsd (%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movl 0x28(%rsp), %eax
movq 0x58(%rsp), %rcx
movq (%rcx), %rcx
movsd (%rcx,%rax,8), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %r15, %rdi
movq %r14, %rsi
callq 0xb00c
cvtsi2sd %ebp, %xmm0
movsd 0x20(%rsp), %xmm1
mulsd %xmm0, %xmm1
movsd 0x10(%rsp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq 0x98(%rsp), %r15
jmp 0x222bd
leaq 0x1c(%rsp), %rsi
movq 0x60(%rsp), %rdi
callq 0x62da
movl 0x4c(%rsp), %eax
movq 0x3e8(%rbx), %rcx
movl (%rcx,%rax,4), %eax
incl %eax
movl 0x1c(%rsp), %edx
movl %eax, (%rcx,%rdx,4)
movl 0x1c(%rsp), %eax
movq 0x3a0(%rbx), %rcx
imulq $0x18, %rax, %rdx
leaq (%rcx,%rdx), %rdi
movq (%rcx,%rdx), %rax
cmpq %rax, 0x8(%rcx,%rdx)
je 0x22624
movq %rax, 0x8(%rdi)
leaq 0x4c(%rsp), %rsi
callq 0x478c
movl 0x4c(%rsp), %eax
movq 0x3b8(%rbx), %rcx
movq 0x430(%rbx), %rdx
movl (%rcx,%rax,4), %eax
movl 0x1c(%rsp), %esi
movl %eax, (%rdx,%rsi,4)
movl 0x1c(%rsp), %eax
movl (%rdx,%rax,4), %edx
movl %edx, (%rcx,%rax,4)
movl 0x1c(%rsp), %esi
movq 0x40(%rsp), %rdi
callq 0x4b82
orq %rdx, (%rax)
leaq 0x28(%rsp), %rbp
leaq 0x4(%rsp), %r12
leaq 0x8(%rsp), %r14
movq 0x4c8(%rbx), %rax
cmpq %rax, 0x4e8(%rbx)
je 0x22824
movl (%rax), %eax
movl %eax, 0x4(%rsp)
movq 0x60(%rsp), %rdi
callq 0x650e
movl 0x4(%rsp), %esi
movq %r15, %rdi
callq 0x25fe0
movq %rbp, %rdi
movq %rax, %rsi
callq 0x4ba0
xorl %ebp, %ebp
movq 0x28(%rsp), %rax
movq 0x30(%rsp), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rbp, %rcx
jbe 0x22812
movl (%rax,%rbp,4), %eax
movl %eax, 0x8(%rsp)
movq 0x3e8(%rbx), %rdx
movl 0x4(%rsp), %ecx
movl (%rdx,%rcx,4), %esi
incl %esi
cmpl %esi, (%rdx,%rax,4)
jle 0x22770
movl %esi, (%rdx,%rax,4)
movl 0x8(%rsp), %eax
movq 0x3a0(%rbx), %rcx
imulq $0x18, %rax, %rdx
leaq (%rcx,%rdx), %rdi
movq (%rcx,%rdx), %rax
cmpq %rax, 0x8(%rcx,%rdx)
je 0x22710
movq %rax, 0x8(%rdi)
movq %r12, %rsi
callq 0x478c
movl 0x8(%rsp), %eax
movq 0x3b8(%rbx), %rcx
andl $0x0, (%rcx,%rax,4)
movl 0x4(%rsp), %eax
movq 0x430(%rbx), %rdx
movl (%rdx,%rax,4), %eax
movl 0x8(%rsp), %esi
movl %eax, (%rdx,%rsi,4)
movl 0x8(%rsp), %eax
movl (%rdx,%rax,4), %edx
addl %edx, (%rcx,%rax,4)
movl 0x8(%rsp), %esi
movq 0x40(%rsp), %rdi
callq 0x4b82
testq %rdx, (%rax)
jne 0x2280a
movl 0x8(%rsp), %esi
movq 0x40(%rsp), %rdi
callq 0x4b82
jmp 0x227fa
jne 0x2280a
movq 0x430(%rbx), %rdx
movl (%rdx,%rcx,4), %ecx
addl %ecx, (%rdx,%rax,4)
movl 0x4(%rsp), %eax
movl (%rdx,%rax,4), %eax
movl 0x8(%rsp), %ecx
movq 0x3b8(%rbx), %rdx
addl %eax, (%rdx,%rcx,4)
movl 0x8(%rsp), %eax
movq 0x3a0(%rbx), %rcx
imulq $0x18, %rax, %rax
movq (%rcx,%rax), %rdi
movq 0x8(%rcx,%rax), %rsi
movq %r12, %rdx
callq 0x688c
movl 0x8(%rsp), %esi
movq 0x3a0(%rbx), %rdi
imulq $0x18, %rsi, %rcx
cmpq 0x8(%rdi,%rcx), %rax
jne 0x227dd
addq %rcx, %rdi
movq %r12, %rsi
callq 0x478c
movl 0x8(%rsp), %esi
movq 0x40(%rsp), %rdi
callq 0x4b82
testq %rdx, (%rax)
jne 0x2280a
movl 0x8(%rsp), %esi
movq 0x40(%rsp), %rdi
callq 0x4b82
orq %rdx, (%rax)
movq 0x60(%rsp), %rdi
movq %r14, %rsi
callq 0x62da
incq %rbp
jmp 0x226b1
leaq 0x28(%rsp), %rbp
movq %rbp, %rdi
callq 0x56ec
jmp 0x22674
movq 0x70(%rsp), %rax
movq 0x78(%rsp), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
movq 0x3e8(%rbx), %rdx
pushq $0x1
popq %rsi
movq %rax, %rdi
cmpq %rsi, %rcx
jbe 0x22880
movl -0x4(%rax,%rsi,4), %r9d
movl (%rax,%rsi,4), %r8d
movl (%rdx,%r8,4), %r10d
cmpl %r10d, (%rdx,%r9,4)
jle 0x22877
movq %rdi, %r9
movl (%r9), %r11d
cmpl %r10d, (%rdx,%r11,4)
jle 0x22877
movl %r8d, (%r9)
movl %r11d, 0x4(%r9)
movl (%rdx,%r8,4), %r10d
addq $-0x4, %r9
jmp 0x2285d
incq %rsi
addq $0x4, %rdi
jmp 0x22842
xorpd %xmm0, %xmm0
movq %r15, %rdi
movq 0x58(%rsp), %rsi
callq 0x269c2
xorpd %xmm0, %xmm0
movq %r15, %rdi
movq 0x68(%rsp), %rsi
callq 0x269c2
movq 0x78(%rsp), %rax
subq 0x70(%rsp), %rax
shrq $0x2, %rax
movl %eax, %r14d
leaq 0xc(%rsp), %r15
leaq 0x4(%rsp), %r12
decq %r14
testl %r14d, %r14d
js 0x22bcb
movl %r14d, %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq 0x70(%rsp), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0x28(%rsp)
movq %r13, %rdi
movq %r15, %rsi
callq 0x22ed2
movq 0x510(%rbx), %rcx
movq 0x518(%rbx), %rdx
cmpq (%rcx,%rdx,8), %rax
je 0x22973
movq %r13, %rdi
leaq 0x28(%rsp), %rsi
callq 0x22ed2
movq 0x510(%rbx), %rcx
movq 0x518(%rbx), %rdx
cmpq (%rcx,%rdx,8), %rax
je 0x22973
movl 0xc(%rsp), %eax
cmpl 0x28(%rsp), %eax
je 0x22973
movq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x22dc4
movq %rax, %rdi
callq 0x176f6
movq %rax, %rbp
movq 0x50(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x22dc4
movq %rax, %rdi
callq 0x176f6
imull %ebp, %eax
movl 0x28(%rsp), %ecx
cvtsi2sd %eax, %xmm0
movq 0x68(%rsp), %rax
movq (%rax), %rax
addsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq %r14, 0x40(%rsp)
xorl %ebp, %ebp
movl 0x28(%rsp), %eax
movq 0x3a0(%rbx), %rdx
imulq $0x18, %rax, %rsi
movq (%rdx,%rsi), %rcx
movq 0x8(%rdx,%rsi), %rdx
subq %rcx, %rdx
sarq $0x2, %rdx
cmpq %rbp, %rdx
jbe 0x22aa9
movl (%rcx,%rbp,4), %r14d
movq 0x3b8(%rbx), %rcx
cvtsi2sdl (%rcx,%r14,4), %xmm1
cvtsi2sdl (%rcx,%rax,4), %xmm0
movq 0x400(%rbx), %rcx
divsd %xmm0, %xmm1
movsd (%rcx,%rax,8), %xmm0
addsd 0x5670(%rip), %xmm0     # 0x28040
movsd %xmm1, 0x10(%rsp)
mulsd %xmm1, %xmm0
addsd (%rcx,%r14,8), %xmm0
movsd %xmm0, (%rcx,%r14,8)
movq %r13, %rdi
movq %r15, %rsi
callq 0x22ed2
movq 0x510(%rbx), %rcx
movq 0x518(%rbx), %rdx
cmpq (%rcx,%rdx,8), %rax
je 0x22aa1
movq 0x448(%rbx), %rax
movl 0x28(%rsp), %ecx
movsd (%rax,%rcx,8), %xmm0
mulsd 0x10(%rsp), %xmm0
addsd (%rax,%r14,8), %xmm0
movsd %xmm0, (%rax,%r14,8)
movq 0x358(%rbx), %rax
movl (%rax,%r14,4), %eax
movl %eax, 0x4(%rsp)
movq 0xe0(%rsp), %r14
movq %r14, %rdi
movq %r12, %rsi
callq 0xb00c
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movl 0x28(%rsp), %eax
movq 0x68(%rsp), %rcx
movq (%rcx), %rcx
movsd (%rcx,%rax,8), %xmm0
movsd %xmm0, 0x90(%rsp)
movq %r14, %rdi
movq %r12, %rsi
callq 0xb00c
movsd 0x10(%rsp), %xmm0
mulsd 0x90(%rsp), %xmm0
mulsd 0x559d(%rip), %xmm0     # 0x28030
movsd 0x20(%rsp), %xmm1
addsd %xmm0, %xmm1
movsd %xmm1, (%rax)
incq %rbp
jmp 0x2297a
cmpl %eax, 0xc(%rsp)
movq 0xe0(%rsp), %r14
je 0x22b18
movq 0x358(%rbx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0x4(%rsp)
movq %r14, %rdi
movq %r12, %rsi
callq 0xb00c
movsd (%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movl 0x28(%rsp), %eax
movq 0x58(%rsp), %rcx
movq (%rcx), %rcx
movsd (%rcx,%rax,8), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %r14, %rdi
movq %r12, %rsi
callq 0xb00c
movsd 0x20(%rsp), %xmm1
mulsd 0x5526(%rip), %xmm1     # 0x28030
movsd 0x10(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq %r13, %rdi
movq %r15, %rsi
callq 0x22ed2
movq 0x510(%rbx), %rcx
movq 0x518(%rbx), %rdx
cmpq (%rcx,%rdx,8), %rax
movq 0x40(%rsp), %r14
je 0x228bd
movq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x22dc4
movq %rax, %rdi
callq 0x176f6
movq %rax, %rbp
movl 0x28(%rsp), %eax
movq 0x358(%rbx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0x4(%rsp)
movq 0xe0(%rsp), %r14
movq %r14, %rdi
movq %r12, %rsi
callq 0xb00c
movsd (%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movl 0x28(%rsp), %eax
movq 0x58(%rsp), %rcx
movq (%rcx), %rcx
movsd (%rcx,%rax,8), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %r14, %rdi
movq %r12, %rsi
callq 0xb00c
cvtsi2sd %ebp, %xmm0
movsd 0x20(%rsp), %xmm1
mulsd %xmm0, %xmm1
addsd 0x10(%rsp), %xmm1
movsd %xmm1, (%rax)
movq 0x40(%rsp), %r14
jmp 0x228bd
leaq 0x70(%rsp), %rdi
callq 0x56ec
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c15
jmp 0x22c15
jmp 0x22c15
jmp 0x22c15
jmp 0x22c15
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x56ec
jmp 0x22c2f
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
jmp 0x22c2c
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x56ec
movq %rbx, %rdi
callq 0x23d0
nop