// File: fjamour[P]icentral/src/bcc_delta.cc
// Function: bcc_delta_t::i_iteration_1(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 bcc_delta_t::i_iteration_1(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 = bcc_fast_subgraph.P; 
        vector<int>&                 path_cnt_map = bcc_fast_subgraph.path_cnt_vec;
        vector<int>&                 new_path_cnt_map = bcc_fast_subgraph.new_path_cnt_vec;
        vector<int>&                 dist_map = bcc_fast_subgraph.dist_vec;
        vector<double>&              pair_dep_map = bcc_fast_subgraph.pair_dep_vec;
        vector<double>&              new_pair_dep_map = bcc_fast_subgraph.new_pair_dep_vec;
        vector<double>&              sigma_t_map = bcc_fast_subgraph.sigma_t_map;
        vector<double>&              new_sigma_t_map = bcc_fast_subgraph.new_sigma_t_map; 
        queue<node_id_t>&            Q = bcc_fast_subgraph.Q;
        stack<node_id_t>             S;
        bcc_fast_subgraph.init_maps();
        
//    int sz = bcc_fast_subgraph.nodes_vec.size();
//        vector<vector<node_id_t> >  P(sz, vector<node_id_t>());// = bcc_fast_subgraph.P; 
//        vector<int>                 path_cnt_map(sz, 0);// = bcc_fast_subgraph.path_cnt_vec;
//        vector<int>                 new_path_cnt_map(sz, 0);// = bcc_fast_subgraph.new_path_cnt_vec;
//        vector<int>                 dist_map(sz, -1);// = bcc_fast_subgraph.dist_vec;
//        vector<double>              pair_dep_map(sz, 0);// = bcc_fast_subgraph.pair_dep_vec;
//        vector<double>              new_pair_dep_map(sz, 0);// = bcc_fast_subgraph.new_pair_dep_vec;
//        vector<double>              sigma_t_map(sz, 0);// = bcc_fast_subgraph.sigma_t_map;
//        vector<double>              new_sigma_t_map(sz, 0);// = bcc_fast_subgraph.new_sigma_t_map; 
//        queue<node_id_t>            Q;// = bcc_fast_subgraph.Q;
//        stack<node_id_t>            S;
        
        
        path_cnt_map[s] = 1;
        new_path_cnt_map[s] = 1;//NEW
        dist_map[s] = 0;
        
        Q.push(s);
        while(!Q.empty()) {
            node_id_t v_i = Q.front(); Q.pop();
            S.push(v_i);
            if(v_i == dst) {//NEW
                new_path_cnt_map[v_i] += path_cnt_map[src];
            }
            for(int i = 0; i < bcc_fast_subgraph.nodes_vec[v_i].size(); ++i) {
                node_id_t v_n = bcc_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];
                    new_path_cnt_map[v_n] += new_path_cnt_map[v_i];//NEW
                    P[v_n].push_back(v_i);
                }
            }
        }
        
        while(!S.empty()) {
            node_id_t v_n = S.top(); S.pop();
            if(   art_pt_map.find(s) != art_pt_map.end()
               && art_pt_map.find(v_n) != art_pt_map.end()
               && s != v_n) {
                int VG_s, VG_n;
                VG_s = accumulate(art_pt_map[s].begin(), art_pt_map[s].end(), 0);
                VG_n = accumulate(art_pt_map[v_n].begin(), art_pt_map[v_n].end(), 0);
                int c_t = VG_s*VG_n;
                sigma_t_map[v_n] =  sigma_t_map[v_n] + c_t;
                new_sigma_t_map[v_n] = new_sigma_t_map[v_n] + c_t;//NEW
                /*this guy must not change!*/
                //bc_map[v_n] = bc_map[v_n] - c_t;
                //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]);
                double new_sp_sn = ((double)new_path_cnt_map[v_p]/new_path_cnt_map[v_n]);
                new_pair_dep_map[v_p] = new_pair_dep_map[v_p] + new_sp_sn*(1+new_pair_dep_map[v_n]);
                if(art_pt_map.find(s) != art_pt_map.end()) {
                    sigma_t_map[v_p] = sigma_t_map[v_p] + sigma_t_map[v_n]*sp_sn;
                    new_sigma_t_map[v_p] = new_sigma_t_map[v_p] + new_sigma_t_map[v_n]*new_sp_sn;
                    
                    node_id_t new_v_p = bcc_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;
                    bc_map[new_v_p] = bc_map[new_v_p] + new_sigma_t_map[v_n]*new_sp_sn/2.0;
                }
            }
            //IMP: this is the only change that happens to P, @src should be added as parent for dst
            if(v_n == dst) {
                node_id_t v_p = src;
                double new_sp_sn = ((double)new_path_cnt_map[v_p]/new_path_cnt_map[v_n]);
                new_pair_dep_map[v_p] = new_pair_dep_map[v_p] + new_sp_sn*(1+new_pair_dep_map[v_n]);
                if(art_pt_map.find(s) != art_pt_map.end()) {
                    new_sigma_t_map[v_p] = new_sigma_t_map[v_p] + new_sigma_t_map[v_n]*new_sp_sn;
                    
                    node_id_t new_v_p = bcc_fast_subgraph.inout_label_map[v_p];
                    bc_map[new_v_p] = bc_map[new_v_p] + new_sigma_t_map[v_n]*new_sp_sn/2.0;
                }
            }
            if(s != v_n) {
                node_id_t new_v_n = bcc_fast_subgraph.inout_label_map[v_n];
                bc_map[new_v_n] = bc_map[new_v_n] - pair_dep_map[v_n]/2.0;
                bc_map[new_v_n] = bc_map[new_v_n] + new_pair_dep_map[v_n]/2.0;
            }
            if(art_pt_map.find(s) != art_pt_map.end()) {
                int VG_s = accumulate(art_pt_map[s].begin(), art_pt_map[s].end(), 0);
                
                node_id_t new_v_n = bcc_fast_subgraph.inout_label_map[v_n];
                bc_map[new_v_n] = bc_map[new_v_n] - pair_dep_map[v_n]*VG_s;
                bc_map[new_v_n] = bc_map[new_v_n] + new_pair_dep_map[v_n]*VG_s;
            }
        }
}

// Assembly:
subq $0x4e8, %rsp            # imm = 0x4E8
movq 0x4f0(%rsp), %rax
movq %rdi, 0x4e0(%rsp)
movl %esi, 0x4dc(%rsp)
movl %edx, 0x4d8(%rsp)
movl %ecx, 0x4d4(%rsp)
movl %r8d, 0x4d0(%rsp)
movl %r9d, 0x4cc(%rsp)
movq 0x4e0(%rsp), %rax
movq %rax, 0x2e0(%rsp)
movq %rax, %rcx
addq $0x2d8, %rcx            # imm = 0x2D8
movq %rcx, 0x2e8(%rsp)
movq %rax, %rcx
addq $0x368, %rcx            # imm = 0x368
movq %rcx, 0x4c0(%rsp)
movq %rax, %rcx
addq $0x380, %rcx            # imm = 0x380
movq %rcx, 0x4b8(%rsp)
movq %rax, %rcx
addq $0x398, %rcx            # imm = 0x398
movq %rcx, 0x4b0(%rsp)
movq %rax, %rcx
addq $0x3b0, %rcx            # imm = 0x3B0
movq %rcx, 0x4a8(%rsp)
movq %rax, %rcx
addq $0x3c8, %rcx            # imm = 0x3C8
movq %rcx, 0x4a0(%rsp)
movq %rax, %rcx
addq $0x3e0, %rcx            # imm = 0x3E0
movq %rcx, 0x498(%rsp)
movq %rax, %rcx
addq $0x410, %rcx            # imm = 0x410
movq %rcx, 0x490(%rsp)
movq %rax, %rcx
addq $0x428, %rcx            # imm = 0x428
movq %rcx, 0x488(%rsp)
addq $0x480, %rax            # imm = 0x480
movq %rax, 0x480(%rsp)
leaq 0x430(%rsp), %rdi
callq 0x21da0
movq 0x2e8(%rsp), %rdi
callq 0x76f80
jmp 0x358a8
movq 0x4b8(%rsp), %rdi
movl 0x4dc(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl $0x1, (%rax)
movq 0x4b0(%rsp), %rdi
movl 0x4dc(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl $0x1, (%rax)
movq 0x4a8(%rsp), %rdi
movl 0x4dc(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl $0x0, (%rax)
movq 0x480(%rsp), %rdi
leaq 0x4dc(%rsp), %rsi
callq 0x105b0
jmp 0x35913
jmp 0x35915
movq 0x480(%rsp), %rdi
callq 0x105e0
movb %al, 0x2df(%rsp)
jmp 0x3592b
movb 0x2df(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x3593d
jmp 0x35c3e
movq 0x480(%rsp), %rdi
callq 0x10600
movq %rax, 0x2d0(%rsp)
jmp 0x35954
movq 0x2d0(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x420(%rsp)
movq 0x480(%rsp), %rdi
callq 0x10610
jmp 0x35974
leaq 0x430(%rsp), %rdi
leaq 0x420(%rsp), %rsi
callq 0x21d50
jmp 0x3598b
movl 0x420(%rsp), %eax
cmpl 0x4d4(%rsp), %eax
jne 0x35a03
movq 0x4b8(%rsp), %rdi
movl 0x4d8(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x2cc(%rsp)
movq 0x4b0(%rsp), %rdi
movl 0x420(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x2cc(%rsp), %ecx
addl (%rax), %ecx
movl %ecx, (%rax)
jmp 0x35a03
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x428(%rsp)
movl %eax, 0x424(%rsp)
leaq 0x430(%rsp), %rdi
callq 0x21e40
jmp 0x36d0a
movl $0x0, 0x41c(%rsp)
movq 0x2e0(%rsp), %rdi
movslq 0x41c(%rsp), %rax
movq %rax, 0x2c0(%rsp)
addq $0x2d8, %rdi            # imm = 0x2D8
movl 0x420(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x2c0(%rsp), %rax
cmpq %rcx, %rax
jae 0x35c39
movq 0x2e0(%rsp), %rdi
addq $0x2d8, %rdi            # imm = 0x2D8
movl 0x420(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
movslq 0x41c(%rsp), %rsi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x418(%rsp)
movq 0x4a8(%rsp), %rdi
movl 0x418(%rsp), %eax
movl %eax, %esi
callq 0xfc50
cmpl $0x0, (%rax)
jge 0x35b00
movq 0x480(%rsp), %rdi
leaq 0x418(%rsp), %rsi
callq 0x105b0
jmp 0x35abf
movq 0x4a8(%rsp), %rdi
movl 0x420(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
addl $0x1, %eax
movl %eax, 0x2bc(%rsp)
movq 0x4a8(%rsp), %rdi
movl 0x418(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x2bc(%rsp), %ecx
movl %ecx, (%rax)
movq 0x4a8(%rsp), %rdi
movl 0x418(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x2b8(%rsp)
movq 0x4a8(%rsp), %rdi
movl 0x420(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movq %rax, %rcx
movl 0x2b8(%rsp), %eax
movl (%rcx), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jne 0x35c21
movq 0x4b8(%rsp), %rdi
movl 0x418(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x2ac(%rsp)
movq 0x4b8(%rsp), %rdi
movl 0x420(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movq %rax, %rcx
movl 0x2ac(%rsp), %eax
movl (%rcx), %ecx
addl %ecx, %eax
movl %eax, 0x2b0(%rsp)
movq 0x4b8(%rsp), %rdi
movl 0x418(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x2b0(%rsp), %ecx
movl %ecx, (%rax)
movq 0x4b0(%rsp), %rdi
movl 0x420(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl (%rax), %eax
movl %eax, 0x2b4(%rsp)
movq 0x4b0(%rsp), %rdi
movl 0x418(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movl 0x2b4(%rsp), %edx
movl (%rax), %ecx
addl %edx, %ecx
movl %ecx, (%rax)
movq 0x4c0(%rsp), %rdi
movl 0x418(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
leaq 0x420(%rsp), %rsi
callq 0xfce0
jmp 0x35c1f
jmp 0x35c21
jmp 0x35c23
movl 0x41c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x41c(%rsp)
jmp 0x35a0e
jmp 0x35915
jmp 0x35c40
leaq 0x430(%rsp), %rdi
callq 0x21ee0
movb %al, 0x2ab(%rsp)
jmp 0x35c56
movb 0x2ab(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x35c68
jmp 0x36cf5
leaq 0x430(%rsp), %rdi
callq 0x21f00
movq %rax, 0x2a0(%rsp)
jmp 0x35c7f
movq 0x2a0(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x414(%rsp)
leaq 0x430(%rsp), %rdi
callq 0x21f10
jmp 0x35c9f
movq 0x2e0(%rsp), %rdi
leaq 0x4dc(%rsp), %rsi
callq 0x10650
movq %rdx, 0x290(%rsp)
movq %rax, 0x298(%rsp)
jmp 0x35cc6
movq 0x2e0(%rsp), %rdi
movq 0x290(%rsp), %rax
movq 0x298(%rsp), %rcx
movq %rcx, 0x400(%rsp)
movq %rax, 0x408(%rsp)
callq 0x10710
movq %rdx, 0x280(%rsp)
movq %rax, 0x288(%rsp)
jmp 0x35d05
movq 0x280(%rsp), %rax
movq 0x288(%rsp), %rcx
movq %rcx, 0x3f0(%rsp)
movq %rax, 0x3f8(%rsp)
leaq 0x400(%rsp), %rdi
leaq 0x3f0(%rsp), %rsi
callq 0x10630
movb %al, 0x27f(%rsp)
jmp 0x35d43
movb 0x27f(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x27e(%rsp)
jne 0x35d5d
jmp 0x35e30
movq 0x2e0(%rsp), %rdi
leaq 0x414(%rsp), %rsi
callq 0x10650
movq %rdx, 0x268(%rsp)
movq %rax, 0x270(%rsp)
jmp 0x35d84
movq 0x2e0(%rsp), %rdi
movq 0x268(%rsp), %rax
movq 0x270(%rsp), %rcx
movq %rcx, 0x3e0(%rsp)
movq %rax, 0x3e8(%rsp)
callq 0x10710
movq %rdx, 0x258(%rsp)
movq %rax, 0x260(%rsp)
jmp 0x35dc3
movq 0x258(%rsp), %rax
movq 0x260(%rsp), %rcx
movq %rcx, 0x3d0(%rsp)
movq %rax, 0x3d8(%rsp)
leaq 0x3e0(%rsp), %rdi
leaq 0x3d0(%rsp), %rsi
callq 0x10630
movb %al, 0x257(%rsp)
jmp 0x35e01
movb 0x257(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x27e(%rsp)
jne 0x35e18
jmp 0x35e30
movl 0x4dc(%rsp), %eax
cmpl 0x414(%rsp), %eax
setne %al
movb %al, 0x27e(%rsp)
movb 0x27e(%rsp), %al
testb $0x1, %al
jne 0x35e40
jmp 0x36028
movq 0x2e0(%rsp), %rdi
leaq 0x4dc(%rsp), %rsi
callq 0x107b0
movq %rax, 0x248(%rsp)
jmp 0x35e5f
movq 0x248(%rsp), %rdi
callq 0x109f0
movq 0x2e0(%rsp), %rdi
movq %rax, 0x3c0(%rsp)
leaq 0x4dc(%rsp), %rsi
callq 0x107b0
movq %rax, 0x240(%rsp)
jmp 0x35e93
movq 0x240(%rsp), %rdi
callq 0x10a20
movq %rax, 0x3b8(%rsp)
movq 0x3c0(%rsp), %rdi
movq 0x3b8(%rsp), %rsi
xorl %edx, %edx
callq 0x10750
movl %eax, 0x23c(%rsp)
jmp 0x35ec8
movq 0x2e0(%rsp), %rdi
movl 0x23c(%rsp), %eax
movl %eax, 0x3cc(%rsp)
leaq 0x414(%rsp), %rsi
callq 0x107b0
movq %rax, 0x230(%rsp)
jmp 0x35ef5
movq 0x230(%rsp), %rdi
callq 0x109f0
movq 0x2e0(%rsp), %rdi
movq %rax, 0x3b0(%rsp)
leaq 0x414(%rsp), %rsi
callq 0x107b0
movq %rax, 0x228(%rsp)
jmp 0x35f29
movq 0x228(%rsp), %rdi
callq 0x10a20
movq %rax, 0x3a8(%rsp)
movq 0x3b0(%rsp), %rdi
movq 0x3a8(%rsp), %rsi
xorl %edx, %edx
callq 0x10750
movl %eax, 0x224(%rsp)
jmp 0x35f5e
movl 0x224(%rsp), %eax
movl %eax, 0x3c8(%rsp)
movl 0x3cc(%rsp), %eax
imull 0x3c8(%rsp), %eax
movl %eax, 0x3a4(%rsp)
movq 0x490(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
cvtsi2sdl 0x3a4(%rsp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x210(%rsp)
movq 0x490(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x210(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x488(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
cvtsi2sdl 0x3a4(%rsp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x218(%rsp)
movq 0x488(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x218(%rsp), %xmm0
movsd %xmm0, (%rax)
movl $0x0, 0x3a0(%rsp)
movslq 0x3a0(%rsp), %rax
movq %rax, 0x208(%rsp)
movq 0x4c0(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x208(%rsp), %rax
cmpq %rcx, %rax
jae 0x365f0
movq 0x4c0(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0x100e0
movq %rax, %rdi
movslq 0x3a0(%rsp), %rsi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x39c(%rsp)
movq 0x4b8(%rsp), %rdi
movl 0x39c(%rsp), %eax
movl %eax, %esi
callq 0xfc50
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, 0x1b0(%rsp)
movq 0x4b8(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movsd 0x1b0(%rsp), %xmm0
cvtsi2sdl (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x390(%rsp)
movq 0x4a0(%rsp), %rdi
movl 0x39c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
movsd %xmm0, 0x1c0(%rsp)
movsd 0x390(%rsp), %xmm0
movsd %xmm0, 0x1b8(%rsp)
movq 0x4a0(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x1b8(%rsp), %xmm0
movsd 0x1c0(%rsp), %xmm1
movsd (%rax), %xmm2
movsd 0x44eb0(%rip), %xmm3    # 0x7b010
movsd %xmm3, 0x1d8(%rsp)
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x1c8(%rsp)
movq 0x4a0(%rsp), %rdi
movl 0x39c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x1c8(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x4b0(%rsp), %rdi
movl 0x39c(%rsp), %eax
movl %eax, %esi
callq 0xfc50
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, 0x1d0(%rsp)
movq 0x4b0(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movsd 0x1d0(%rsp), %xmm0
cvtsi2sdl (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x388(%rsp)
movq 0x498(%rsp), %rdi
movl 0x39c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
movsd %xmm0, 0x1e8(%rsp)
movsd 0x388(%rsp), %xmm0
movsd %xmm0, 0x1e0(%rsp)
movq 0x498(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x1d8(%rsp), %xmm3
movsd 0x1e0(%rsp), %xmm0
movsd 0x1e8(%rsp), %xmm1
movsd (%rax), %xmm2
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x1f0(%rsp)
movq 0x498(%rsp), %rdi
movl 0x39c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x1f0(%rsp), %xmm0
movq 0x2e0(%rsp), %rdi
movsd %xmm0, (%rax)
leaq 0x4dc(%rsp), %rsi
callq 0x10650
movq %rdx, 0x1f8(%rsp)
movq %rax, 0x200(%rsp)
jmp 0x362bd
movq 0x2e0(%rsp), %rdi
movq 0x1f8(%rsp), %rax
movq 0x200(%rsp), %rcx
movq %rcx, 0x378(%rsp)
movq %rax, 0x380(%rsp)
callq 0x10710
movq %rdx, 0x1a0(%rsp)
movq %rax, 0x1a8(%rsp)
jmp 0x362fc
movq 0x1a0(%rsp), %rax
movq 0x1a8(%rsp), %rcx
movq %rcx, 0x368(%rsp)
movq %rax, 0x370(%rsp)
leaq 0x378(%rsp), %rdi
leaq 0x368(%rsp), %rsi
callq 0x10630
movb %al, 0x19f(%rsp)
jmp 0x3633a
movb 0x19f(%rsp), %al
testb $0x1, %al
jne 0x3634a
jmp 0x365d8
movq 0x490(%rsp), %rdi
movl 0x39c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
movsd %xmm0, 0x170(%rsp)
movq 0x490(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x170(%rsp), %xmm1
movsd (%rax), %xmm0
movsd 0x390(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x178(%rsp)
movq 0x490(%rsp), %rdi
movl 0x39c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x178(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x488(%rsp), %rdi
movl 0x39c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
movsd %xmm0, 0x180(%rsp)
movq 0x488(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x180(%rsp), %xmm1
movsd (%rax), %xmm0
movsd 0x388(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x188(%rsp)
movq 0x488(%rsp), %rdi
movl 0x39c(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x188(%rsp), %xmm0
movq 0x2e0(%rsp), %rdi
movsd %xmm0, (%rax)
addq $0x320, %rdi            # imm = 0x320
movl 0x39c(%rsp), %eax
movl %eax, %esi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x364(%rsp)
movq 0x4f0(%rsp), %rdi
leaq 0x364(%rsp), %rsi
callq 0x2d310
movq %rax, 0x190(%rsp)
jmp 0x36495
movq 0x190(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x158(%rsp)
movq 0x490(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x158(%rsp), %xmm0
movsd (%rax), %xmm1
movsd 0x390(%rsp), %xmm2
mulsd %xmm2, %xmm1
movsd 0x44d86(%rip), %xmm2    # 0x7b268
mulsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x160(%rsp)
movq 0x4f0(%rsp), %rdi
leaq 0x364(%rsp), %rsi
callq 0x2d310
movq %rax, 0x168(%rsp)
jmp 0x36512
movq 0x168(%rsp), %rax
movsd 0x160(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x4f0(%rsp), %rdi
leaq 0x364(%rsp), %rsi
callq 0x2d310
movq %rax, 0x150(%rsp)
jmp 0x36546
movq 0x150(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x138(%rsp)
movq 0x488(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x138(%rsp), %xmm0
movsd (%rax), %xmm1
movsd 0x388(%rsp), %xmm2
mulsd %xmm2, %xmm1
movsd 0x44cad(%rip), %xmm2    # 0x7b240
mulsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x140(%rsp)
movq 0x4f0(%rsp), %rdi
leaq 0x364(%rsp), %rsi
callq 0x2d310
movq %rax, 0x148(%rsp)
jmp 0x365c3
movq 0x148(%rsp), %rax
movsd 0x140(%rsp), %xmm0
movsd %xmm0, (%rax)
jmp 0x365da
movl 0x3a0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x3a0(%rsp)
jmp 0x36033
movl 0x414(%rsp), %eax
cmpl 0x4d4(%rsp), %eax
jne 0x36916
movl 0x4d8(%rsp), %eax
movl %eax, 0x360(%rsp)
movq 0x4b0(%rsp), %rdi
movl 0x360(%rsp), %eax
movl %eax, %esi
callq 0xfc50
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, 0x108(%rsp)
movq 0x4b0(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfc50
movsd 0x108(%rsp), %xmm0
cvtsi2sdl (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x358(%rsp)
movq 0x498(%rsp), %rdi
movl 0x360(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
movsd %xmm0, 0x118(%rsp)
movsd 0x358(%rsp), %xmm0
movsd %xmm0, 0x110(%rsp)
movq 0x498(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x110(%rsp), %xmm0
movsd 0x118(%rsp), %xmm1
movsd (%rax), %xmm2
movsd 0x44942(%rip), %xmm3    # 0x7b010
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x120(%rsp)
movq 0x498(%rsp), %rdi
movl 0x360(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x120(%rsp), %xmm0
movq 0x2e0(%rsp), %rdi
movsd %xmm0, (%rax)
leaq 0x4dc(%rsp), %rsi
callq 0x10650
movq %rdx, 0x128(%rsp)
movq %rax, 0x130(%rsp)
jmp 0x3672d
movq 0x2e0(%rsp), %rdi
movq 0x128(%rsp), %rax
movq 0x130(%rsp), %rcx
movq %rcx, 0x348(%rsp)
movq %rax, 0x350(%rsp)
callq 0x10710
movq %rdx, 0xf8(%rsp)
movq %rax, 0x100(%rsp)
jmp 0x3676c
movq 0xf8(%rsp), %rax
movq 0x100(%rsp), %rcx
movq %rcx, 0x338(%rsp)
movq %rax, 0x340(%rsp)
leaq 0x348(%rsp), %rdi
leaq 0x338(%rsp), %rsi
callq 0x10630
movb %al, 0xf7(%rsp)
jmp 0x367aa
movb 0xf7(%rsp), %al
testb $0x1, %al
jne 0x367ba
jmp 0x36914
movq 0x488(%rsp), %rdi
movl 0x360(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rax), %xmm0
movsd %xmm0, 0xd8(%rsp)
movq 0x488(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0xd8(%rsp), %xmm1
movsd (%rax), %xmm0
movsd 0x358(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0xe0(%rsp)
movq 0x488(%rsp), %rdi
movl 0x360(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0xe0(%rsp), %xmm0
movq 0x2e0(%rsp), %rdi
movsd %xmm0, (%rax)
addq $0x320, %rdi            # imm = 0x320
movl 0x360(%rsp), %eax
movl %eax, %esi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x334(%rsp)
movq 0x4f0(%rsp), %rdi
leaq 0x334(%rsp), %rsi
callq 0x2d310
movq %rax, 0xe8(%rsp)
jmp 0x36882
movq 0xe8(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0xc0(%rsp)
movq 0x488(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0xc0(%rsp), %xmm0
movsd (%rax), %xmm1
movsd 0x358(%rsp), %xmm2
mulsd %xmm2, %xmm1
movsd 0x44971(%rip), %xmm2    # 0x7b240
mulsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0xc8(%rsp)
movq 0x4f0(%rsp), %rdi
leaq 0x334(%rsp), %rsi
callq 0x2d310
movq %rax, 0xd0(%rsp)
jmp 0x368ff
movq 0xd0(%rsp), %rax
movsd 0xc8(%rsp), %xmm0
movsd %xmm0, (%rax)
jmp 0x36916
movl 0x4dc(%rsp), %eax
cmpl 0x414(%rsp), %eax
je 0x36a98
movq 0x2e0(%rsp), %rdi
addq $0x320, %rdi            # imm = 0x320
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x330(%rsp)
movq 0x4f0(%rsp), %rdi
leaq 0x330(%rsp), %rsi
callq 0x2d310
movq %rax, 0xb8(%rsp)
jmp 0x3696f
movq 0xb8(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0xa0(%rsp)
movq 0x4a0(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0xa0(%rsp), %xmm0
movsd (%rax), %xmm1
movsd 0x448b9(%rip), %xmm2    # 0x7b268
mulsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0xa8(%rsp)
movq 0x4f0(%rsp), %rdi
leaq 0x330(%rsp), %rsi
callq 0x2d310
movq %rax, 0xb0(%rsp)
jmp 0x369df
movq 0xb0(%rsp), %rax
movsd 0xa8(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x4f0(%rsp), %rdi
leaq 0x330(%rsp), %rsi
callq 0x2d310
movq %rax, 0x98(%rsp)
jmp 0x36a13
movq 0x98(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x80(%rsp)
movq 0x498(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x80(%rsp), %xmm0
movsd (%rax), %xmm1
movsd 0x447ed(%rip), %xmm2    # 0x7b240
mulsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x88(%rsp)
movq 0x4f0(%rsp), %rdi
leaq 0x330(%rsp), %rsi
callq 0x2d310
movq %rax, 0x90(%rsp)
jmp 0x36a83
movq 0x90(%rsp), %rax
movsd 0x88(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x2e0(%rsp), %rdi
leaq 0x4dc(%rsp), %rsi
callq 0x10650
movq %rdx, 0x70(%rsp)
movq %rax, 0x78(%rsp)
jmp 0x36ab9
movq 0x2e0(%rsp), %rdi
movq 0x70(%rsp), %rax
movq 0x78(%rsp), %rcx
movq %rcx, 0x320(%rsp)
movq %rax, 0x328(%rsp)
callq 0x10710
movq %rdx, 0x60(%rsp)
movq %rax, 0x68(%rsp)
jmp 0x36aec
movq 0x60(%rsp), %rax
movq 0x68(%rsp), %rcx
movq %rcx, 0x310(%rsp)
movq %rax, 0x318(%rsp)
leaq 0x320(%rsp), %rdi
leaq 0x310(%rsp), %rsi
callq 0x10630
movb %al, 0x5f(%rsp)
jmp 0x36b21
movb 0x5f(%rsp), %al
testb $0x1, %al
jne 0x36b2e
jmp 0x36cf0
movq 0x2e0(%rsp), %rdi
leaq 0x4dc(%rsp), %rsi
callq 0x107b0
movq %rax, 0x50(%rsp)
jmp 0x36b4a
movq 0x50(%rsp), %rdi
callq 0x109f0
movq 0x2e0(%rsp), %rdi
movq %rax, 0x300(%rsp)
leaq 0x4dc(%rsp), %rsi
callq 0x107b0
movq %rax, 0x48(%rsp)
jmp 0x36b78
movq 0x48(%rsp), %rdi
callq 0x10a20
movq %rax, 0x2f8(%rsp)
movq 0x300(%rsp), %rdi
movq 0x2f8(%rsp), %rsi
xorl %edx, %edx
callq 0x10750
movl %eax, 0x44(%rsp)
jmp 0x36ba7
movq 0x2e0(%rsp), %rdi
movl 0x44(%rsp), %eax
movl %eax, 0x30c(%rsp)
addq $0x320, %rdi            # imm = 0x320
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x2f4(%rsp)
movq 0x4f0(%rsp), %rdi
leaq 0x2f4(%rsp), %rsi
callq 0x2d310
movq %rax, 0x38(%rsp)
jmp 0x36bf4
movq 0x38(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movq 0x4a0(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd 0x20(%rsp), %xmm0
movsd (%rax), %xmm1
cvtsi2sdl 0x30c(%rsp), %xmm2
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, 0x28(%rsp)
movq 0x4f0(%rsp), %rdi
leaq 0x2f4(%rsp), %rsi
callq 0x2d310
movq %rax, 0x30(%rsp)
jmp 0x36c56
movq 0x30(%rsp), %rax
movsd 0x28(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x4f0(%rsp), %rdi
leaq 0x2f4(%rsp), %rsi
callq 0x2d310
movq %rax, 0x18(%rsp)
jmp 0x36c81
movq 0x18(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, (%rsp)
movq 0x498(%rsp), %rdi
movl 0x414(%rsp), %eax
movl %eax, %esi
callq 0xfa30
movsd (%rsp), %xmm1
movsd (%rax), %xmm0
cvtsi2sdl 0x30c(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x8(%rsp)
movq 0x4f0(%rsp), %rdi
leaq 0x2f4(%rsp), %rsi
callq 0x2d310
movq %rax, 0x10(%rsp)
jmp 0x36ce1
movq 0x10(%rsp), %rax
movsd 0x8(%rsp), %xmm0
movsd %xmm0, (%rax)
jmp 0x35c40
leaq 0x430(%rsp), %rdi
callq 0x21e40
addq $0x4e8, %rsp            # imm = 0x4E8
retq
movq 0x428(%rsp), %rdi
callq 0x9cf0
nopw (%rax,%rax)