// File: sundale[P]gcode/rs274ngc/interp_convert.cc
// Function: Interp::convert_straight_comp2(int, block_struct*, setup_struct*, double, double, double, double, double, double, double, double, double)
int Interp::convert_straight_comp2(int move,     //!< either G_0 or G_1                        
                                   block_pointer block,  //!< pointer to a block of RS274 instructions 
                                   setup_pointer settings,       //!< pointer to machine settings              
                                   double px,    //!< X coordinate of programmed end point     
                                   double py,    //!< Y coordinate of programmed end point     
                                   double pz,    //!< Z coordinate of end point                
                                   double AA_end,        //!< A coordinate of end point
                                   double BB_end,        //!< B coordinate of end point
                                   double CC_end,        //!< C coordinate of end point
                                   double u_end, double v_end, double w_end)
{
    double alpha;
    double beta;
    double end_x, end_y, end_z;                 /* x-coordinate of actual end point */
    double gamma;
    double mid_x, mid_y;                 /* x-coordinate of end of added arc, if needed */
    double radius;
    int side;
    double small = TOLERANCE_CONCAVE_CORNER;      /* radians, testing corners */
    double opx, opy, opz;      /* old programmed beginning point */
    double theta;
    double cx, cy, cz;
    int concave;

    comp_get_current(settings, &cx, &cy, &cz);
    comp_get_current(settings, &end_x, &end_y, &end_z);
    comp_get_programmed(settings, &opx, &opy, &opz);

    if ((py == opy) && (px == opx)) {     /* no XY motion */
        if (move == G_0) {
            enqueue_STRAIGHT_TRAVERSE(settings, block->line_number, 
                                      px - opx, py - opy, pz - opz, 
                                      cx, cy, pz,
                                      AA_end, BB_end, CC_end, u_end, v_end, w_end);
        } else if (move == G_1) {
            enqueue_STRAIGHT_FEED(settings, block->line_number, 
                                  px - opx, py - opy, pz - opz, 
                                  cx, cy, pz, AA_end, BB_end, CC_end, u_end, v_end, w_end);
        } else
            ERS(NCE_BUG_CODE_NOT_G0_OR_G1);
        // end already filled out, above
    } else {
        // some XY motion
        side = settings->cutter_comp_side;
        radius = settings->cutter_comp_radius;      /* will always be positive */
        theta = atan2(cy - opy, cx - opx);
        alpha = atan2(py - opy, px - opx);

        if (side == LEFT) {
            if (theta < alpha)
                theta = (theta + (2 * M_PIl));
            beta = ((theta - alpha) - M_PI_2l);
            gamma = M_PI_2l;
        } else if (side == RIGHT) {
            if (alpha < theta)
                alpha = (alpha + (2 * M_PIl));
            beta = ((alpha - theta) - M_PI_2l);
            gamma = -M_PI_2l;
        } else
            ERS(NCE_BUG_SIDE_NOT_RIGHT_OR_LEFT);
        end_x = (px + (radius * cos(alpha + gamma)));
        end_y = (py + (radius * sin(alpha + gamma)));
        mid_x = (opx + (radius * cos(alpha + gamma)));
        mid_y = (opy + (radius * sin(alpha + gamma)));
    
        if ((beta < -small) || (beta > (M_PIl + small))) {
            concave = 1;
        } else if (beta > (M_PIl - small) && 
                   (!qc().empty() && qc().front().type == QARC_FEED && 
                    ((side == RIGHT && qc().front().data.arc_feed.turn == 1) || 
                     (side == LEFT && qc().front().data.arc_feed.turn == -1)))) {
            // this is an "h" shape, tool on right, going right to left
            // over the hemispherical round part, then up next to the
            // vertical part (or, the mirror case).  there are two ways
            // to stay to the "right", either loop down and around, or
            // stay above and right.  we're forcing above and right.
            concave = 1;
        } else {
            concave = 0;
            mid_x = (opx + (radius * cos(alpha + gamma)));
            mid_y = (opy + (radius * sin(alpha + gamma)));
        }

        if (!concave && (beta > small)) {       /* ARC NEEDED */
            CHP(move_endpoint_and_flush(settings, cx, cy));
            if(move == G_1) {
                enqueue_ARC_FEED(settings, block->line_number,
                                 0.0, // doesn't matter, since we will not move this arc's endpoint
                                 mid_x, mid_y, opx, opy,
                                 ((side == LEFT) ? -1 : 1), cz,
                                 AA_end, BB_end, CC_end, u_end, v_end, w_end);
                dequeue_canons(settings);
                set_endpoint(mid_x, mid_y);
            } else if(move == G_0) {
                // we can't go around the corner because there is no
                // arc traverse.  but, if we do this anyway, at least
                // most of our rapid will be parallel to the original
                // programmed one.  if nothing else, this will look a
                // little less confusing in the preview.
                enqueue_STRAIGHT_TRAVERSE(settings, block->line_number,
                                          0.0, 0.0, 0.0, 
                                          mid_x, mid_y, cz, 
                                          AA_end, BB_end, CC_end,
                                          u_end, v_end, w_end);
                dequeue_canons(settings);
                set_endpoint(mid_x, mid_y);
            } else ERS(NCE_BUG_CODE_NOT_G0_OR_G1);
        } else if (concave) {
            if (qc().front().type != QARC_FEED) {
                // line->line
                double retreat;
                // half the angle of the inside corner
                double halfcorner = (beta + M_PIl) / 2.0;
                CHKS((halfcorner == 0.0), (_("Zero degree inside corner is invalid for cutter compensation")));
                retreat = radius / tan(halfcorner);
                // move back along the compensated path
                // this should replace the endpoint of the previous move
                mid_x = cx + retreat * cos(theta + gamma);
                mid_y = cy + retreat * sin(theta + gamma);
                // we actually want to move the previous line's endpoint here.  That's the same as 
                // discarding that line and doing this one instead.
                CHP(move_endpoint_and_flush(settings, mid_x, mid_y));
            } else {
                // arc->line
                // beware: the arc we saved is the compensated one.
                arc_feed prev = qc().front().data.arc_feed;
                double oldrad = hypot(prev.center2 - prev.end2, prev.center1 - prev.end1);
                double oldrad_uncomp;

                // new line's direction
                double base_dir = atan2(py - opy, px - opx);
                double theta;
                double phi;

                theta = (prev.turn == 1) ? base_dir + M_PI_2l : base_dir - M_PI_2l;
                phi = atan2(prev.center2 - opy, prev.center1 - opx);
                if TOOL_INSIDE_ARC(side, prev.turn) {
                    oldrad_uncomp = oldrad + radius;
                } else {
                    oldrad_uncomp = oldrad - radius;
                }

                double alpha = theta - phi;
                // distance to old arc center perpendicular to the new line
                double d = oldrad_uncomp * cos(alpha);
                double d2;
                double angle_from_center;

                if TOOL_INSIDE_ARC(side, prev.turn) {
                    d2 = d - radius;
                    double l = d2/oldrad;
                    CHKS((l > 1.0 || l < -1.0), _("Arc to straight motion makes a corner the compensated tool can't fit in without gouging"));
                    if(prev.turn == 1) 
                        angle_from_center = - acos(l) + theta + M_PIl;
                    else
                        angle_from_center = acos(l) + theta + M_PIl;
                } else {
                    d2 = d + radius;
                    double l = d2/oldrad;
                    CHKS((l > 1.0 || l < -1.0), _("Arc to straight motion makes a corner the compensated tool can't fit in without gouging"));
                    if(prev.turn == 1) 
                        angle_from_center = acos(l) + theta + M_PIl;
                    else
                        angle_from_center = - acos(l) + theta + M_PIl;
                }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x360, %rsp            # imm = 0x360
movsd 0x10(%rbp), %xmm8
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movsd %xmm0, -0x30(%rbp)
movsd %xmm1, -0x38(%rbp)
movsd %xmm2, -0x40(%rbp)
movsd %xmm3, -0x48(%rbp)
movsd %xmm4, -0x50(%rbp)
movsd %xmm5, -0x58(%rbp)
movsd %xmm6, -0x60(%rbp)
movsd %xmm7, -0x68(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x270(%rbp)
movsd 0x487cd(%rip), %xmm0    # 0x78e28
movsd %xmm0, -0xc0(%rbp)
movq -0x28(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
leaq -0xf0(%rbp), %rcx
leaq -0xf8(%rbp), %r8
callq 0x12360
movq -0x270(%rbp), %rdi
movq -0x28(%rbp), %rsi
leaq -0x80(%rbp), %rdx
leaq -0x88(%rbp), %rcx
leaq -0x90(%rbp), %r8
callq 0x12360
movq -0x270(%rbp), %rdi
movq -0x28(%rbp), %rsi
leaq -0xc8(%rbp), %rdx
leaq -0xd0(%rbp), %rcx
leaq -0xd8(%rbp), %r8
callq 0x11360
movsd -0x38(%rbp), %xmm0
ucomisd -0xd0(%rbp), %xmm0
jne 0x3090f
jp 0x3090f
movsd -0x30(%rbp), %xmm0
ucomisd -0xc8(%rbp), %xmm0
jne 0x3090f
jp 0x3090f
cmpl $0x0, -0x14(%rbp)
jne 0x30795
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x1d0(%rax), %esi
movsd -0x30(%rbp), %xmm0
subsd -0xc8(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
subsd -0xd0(%rbp), %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0xd8(%rbp), %xmm2
movsd -0xe8(%rbp), %xmm3
movsd -0xf0(%rbp), %xmm4
movsd -0x40(%rbp), %xmm5
movsd -0x48(%rbp), %xmm6
movsd -0x50(%rbp), %xmm7
movsd -0x58(%rbp), %xmm11
movsd -0x60(%rbp), %xmm10
movsd -0x68(%rbp), %xmm9
movsd 0x10(%rbp), %xmm8
movsd %xmm11, (%rsp)
movsd %xmm10, 0x8(%rsp)
movsd %xmm9, 0x10(%rsp)
movsd %xmm8, 0x18(%rsp)
callq 0x123e8
jmp 0x3090a
cmpl $0xa, -0x14(%rbp)
jne 0x30830
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x1d0(%rax), %esi
movsd -0x30(%rbp), %xmm0
subsd -0xc8(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
subsd -0xd0(%rbp), %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0xd8(%rbp), %xmm2
movsd -0xe8(%rbp), %xmm3
movsd -0xf0(%rbp), %xmm4
movsd -0x40(%rbp), %xmm5
movsd -0x48(%rbp), %xmm6
movsd -0x50(%rbp), %xmm7
movsd -0x58(%rbp), %xmm11
movsd -0x60(%rbp), %xmm10
movsd -0x68(%rbp), %xmm9
movsd 0x10(%rbp), %xmm8
movsd %xmm11, (%rsp)
movsd %xmm10, 0x8(%rsp)
movsd %xmm9, 0x10(%rsp)
movsd %xmm8, 0x18(%rsp)
callq 0x123d0
jmp 0x30908
jmp 0x30832
leaq 0x4a7f1(%rip), %rdi     # 0x7b02a
callq 0x10380
movq -0x270(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x5670a(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x566f9(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x566eb(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x4a9a2(%rip), %rsi     # 0x7b22c
movl $0x50, %edx
callq 0x10840
movq 0x566c5(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x566b7(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x5669f(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x5668f(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x56682(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x56674(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x31d3a
jmp 0x3090a
jmp 0x31c9b
movq -0x28(%rbp), %rax
movl 0x624(%rax), %eax
movl %eax, -0xb4(%rbp)
movq -0x28(%rbp), %rax
movsd 0x618(%rax), %xmm0
movsd %xmm0, -0xb0(%rbp)
movsd -0xf0(%rbp), %xmm0
subsd -0xd0(%rbp), %xmm0
movsd -0xe8(%rbp), %xmm1
subsd -0xc8(%rbp), %xmm1
callq 0x101d0
movsd %xmm0, -0xe0(%rbp)
movsd -0x38(%rbp), %xmm0
subsd -0xd0(%rbp), %xmm0
movsd -0x30(%rbp), %xmm1
subsd -0xc8(%rbp), %xmm1
callq 0x101d0
movsd %xmm0, -0x70(%rbp)
cmpl $0x2, -0xb4(%rbp)
jne 0x30a17
movsd -0xe0(%rbp), %xmm1
movsd -0x70(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x309c8
fldl -0xe0(%rbp)
fldt 0x484f0(%rip)           # 0x78ea0
faddp %st, %st(1)
fstpl -0x208(%rbp)
movsd -0x208(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
movsd -0xe0(%rbp), %xmm0
movsd -0x70(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x210(%rbp)
fldl -0x210(%rbp)
fldt 0x46653(%rip)           # 0x77040
faddp %st, %st(1)
fstpl -0x218(%rbp)
movsd -0x218(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd 0x48476(%rip), %xmm0    # 0x78e80
movsd %xmm0, -0x98(%rbp)
jmp 0x30b7e
cmpl $0x1, -0xb4(%rbp)
jne 0x30aa4
movsd -0x70(%rbp), %xmm1
movsd -0xe0(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x30a55
fldl -0x70(%rbp)
fldt 0x48460(%rip)           # 0x78ea0
faddp %st, %st(1)
fstpl -0x1f0(%rbp)
movsd -0x1f0(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x70(%rbp), %xmm0
movsd -0xe0(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x1f8(%rbp)
fldl -0x1f8(%rbp)
fldt 0x465c6(%rip)           # 0x77040
faddp %st, %st(1)
fstpl -0x200(%rbp)
movsd -0x200(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd 0x483e1(%rip), %xmm0    # 0x78e78
movsd %xmm0, -0x98(%rbp)
jmp 0x30b7c
jmp 0x30aa6
leaq 0x4a689(%rip), %rdi     # 0x7b136
callq 0x10380
movq -0x270(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x56496(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x56485(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x56477(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x4a72e(%rip), %rsi     # 0x7b22c
movl $0x50, %edx
callq 0x10840
movq 0x56451(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x56443(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x5642b(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x5641b(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x5640e(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x56400(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x31d3a
jmp 0x30b7e
movsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x2b0(%rbp)
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x2a8(%rbp)
movsd -0x70(%rbp), %xmm0
addsd -0x98(%rbp), %xmm0
callq 0x12160
movsd -0x2b0(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x2a8(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x2a0(%rbp)
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x298(%rbp)
movsd -0x70(%rbp), %xmm0
addsd -0x98(%rbp), %xmm0
callq 0x10330
movsd -0x2a0(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x298(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0xc8(%rbp), %xmm0
movsd %xmm0, -0x290(%rbp)
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x288(%rbp)
movsd -0x70(%rbp), %xmm0
addsd -0x98(%rbp), %xmm0
callq 0x12160
movsd -0x290(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x288(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0xd0(%rbp), %xmm0
movsd %xmm0, -0x280(%rbp)
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x278(%rbp)
movsd -0x70(%rbp), %xmm0
addsd -0x98(%rbp), %xmm0
callq 0x10330
movsd -0x280(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x278(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa8(%rbp)
movsd -0x78(%rbp), %xmm1
movsd -0xc0(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
ucomisd %xmm1, %xmm0
ja 0x30d0e
fldl -0x78(%rbp)
fldl -0xc0(%rbp)
fldt 0x481be(%rip)           # 0x78ec0
faddp %st, %st(1)
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
jbe 0x30d1d
jmp 0x30d0e
movl $0x1, -0xfc(%rbp)
jmp 0x30e58
fldl -0x78(%rbp)
fldl -0xc0(%rbp)
fldt 0x48194(%rip)           # 0x78ec0
fsubp %st, %st(1)
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
jbe 0x30da2
jmp 0x30d38
callq 0x103d0
movq %rax, %rdi
callq 0x11220
testb $0x1, %al
jne 0x30da2
callq 0x103d0
movq %rax, %rdi
callq 0x11aa0
cmpl $0x2, (%rax)
jne 0x30da2
cmpl $0x1, -0xb4(%rbp)
jne 0x30d77
callq 0x103d0
movq %rax, %rdi
callq 0x11aa0
cmpl $0x1, 0x38(%rax)
je 0x30d93
cmpl $0x2, -0xb4(%rbp)
jne 0x30da2
callq 0x103d0
movq %rax, %rdi
callq 0x11aa0
cmpl $-0x1, 0x38(%rax)
jne 0x30da2
movl $0x1, -0xfc(%rbp)
jmp 0x30e56
movl $0x0, -0xfc(%rbp)
movsd -0xc8(%rbp), %xmm0
movsd %xmm0, -0x2d0(%rbp)
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x2c8(%rbp)
movsd -0x70(%rbp), %xmm0
addsd -0x98(%rbp), %xmm0
callq 0x12160
movsd -0x2d0(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x2c8(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0xd0(%rbp), %xmm0
movsd %xmm0, -0x2c0(%rbp)
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x2b8(%rbp)
movsd -0x70(%rbp), %xmm0
addsd -0x98(%rbp), %xmm0
callq 0x10330
movsd -0x2c0(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x2b8(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa8(%rbp)
jmp 0x30e58
cmpl $0x0, -0xfc(%rbp)
jne 0x311aa
movsd -0x78(%rbp), %xmm0
ucomisd -0xc0(%rbp), %xmm0
jbe 0x311aa
jmp 0x30e7a
movq -0x270(%rbp), %rdi
movq -0x28(%rbp), %rsi
movsd -0xe8(%rbp), %xmm0
movsd -0xf0(%rbp), %xmm1
callq 0x10c40
movl %eax, -0x100(%rbp)
cmpl $0x0, -0x100(%rbp)
je 0x30f6d
jmp 0x30eaf
movq 0x560aa(%rip), %rax     # 0x86f60
cmpl $0x31, 0xd670(%rax)
jge 0x30f5f
movq 0x56096(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x56088(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x4a33f(%rip), %rsi     # 0x7b22c
movl $0x50, %edx
callq 0x10840
movq 0x56062(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x56054(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x5603c(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x5602c(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x5601f(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x56011(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl -0x100(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x31d3a
jmp 0x30f6f
cmpl $0xa, -0x14(%rbp)
jne 0x3102d
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x1d0(%rax), %esi
movsd -0xa0(%rbp), %xmm1
movsd -0xa8(%rbp), %xmm2
movsd -0xc8(%rbp), %xmm3
movsd -0xd0(%rbp), %xmm4
movl -0xb4(%rbp), %ecx
movl $0x1, %edx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl $0x2, %ecx
cmovel %eax, %edx
movsd -0xf8(%rbp), %xmm5
movsd -0x48(%rbp), %xmm6
movsd -0x50(%rbp), %xmm7
movsd -0x58(%rbp), %xmm11
movsd -0x60(%rbp), %xmm10
movsd -0x68(%rbp), %xmm9
movsd 0x10(%rbp), %xmm8
xorps %xmm0, %xmm0
movsd %xmm11, (%rsp)
movsd %xmm10, 0x8(%rsp)
movsd %xmm9, 0x10(%rsp)
movsd %xmm8, 0x18(%rsp)
callq 0x105d0
movq -0x28(%rbp), %rdi
callq 0x10500
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
callq 0x11060
jmp 0x311a5
cmpl $0x0, -0x14(%rbp)
jne 0x310cb
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rax
movl 0x1d0(%rax), %esi
movsd -0xa0(%rbp), %xmm3
movsd -0xa8(%rbp), %xmm4
movsd -0xf8(%rbp), %xmm5
movsd -0x48(%rbp), %xmm6
movsd -0x50(%rbp), %xmm7
movsd -0x58(%rbp), %xmm11
movsd -0x60(%rbp), %xmm10
movsd -0x68(%rbp), %xmm9
movsd 0x10(%rbp), %xmm8
xorps %xmm2, %xmm2
movaps %xmm2, %xmm0
movaps %xmm2, %xmm1
movsd %xmm11, (%rsp)
movsd %xmm10, 0x8(%rsp)
movsd %xmm9, 0x10(%rsp)
movsd %xmm8, 0x18(%rsp)
callq 0x123e8
movq -0x28(%rbp), %rdi
callq 0x10500
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
callq 0x11060
jmp 0x311a3
jmp 0x310cd
leaq 0x49f56(%rip), %rdi     # 0x7b02a
callq 0x10380
movq -0x270(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x55e6f(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x55e5e(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x55e50(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x4a107(%rip), %rsi     # 0x7b22c
movl $0x50, %edx
callq 0x10840
movq 0x55e2a(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x55e1c(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x55e04(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x55df4(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x55de7(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x55dd9(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x31d3a
jmp 0x311a5
jmp 0x31be8
cmpl $0x0, -0xfc(%rbp)
je 0x31bc8
callq 0x103d0
movq %rax, %rdi
callq 0x11aa0
cmpl $0x2, (%rax)
je 0x314c9
fldl -0x78(%rbp)
fldt 0x47cea(%rip)           # 0x78ec0
faddp %st, %st(1)
flds 0x47e12(%rip)           # 0x78ff0
fmulp %st, %st(1)
fstpl -0x268(%rbp)
movsd -0x268(%rbp), %xmm0
movsd %xmm0, -0x110(%rbp)
movsd -0x110(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x312e9
jp 0x312e9
jmp 0x31213
leaq 0x4a0a0(%rip), %rdi     # 0x7b2ba
callq 0x10380
movq -0x270(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x55d29(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x55d18(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x55d0a(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x49fc1(%rip), %rsi     # 0x7b22c
movl $0x50, %edx
callq 0x10840
movq 0x55ce4(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x55cd6(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x55cbe(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x55cae(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x55ca1(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x55c93(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x31d3a
jmp 0x312eb
movsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x2f8(%rbp)
movsd -0x110(%rbp), %xmm0
callq 0x10900
movaps %xmm0, %xmm1
movsd -0x2f8(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0x108(%rbp)
movsd -0xe8(%rbp), %xmm0
movsd %xmm0, -0x2f0(%rbp)
movsd -0x108(%rbp), %xmm0
movsd %xmm0, -0x2e8(%rbp)
movsd -0xe0(%rbp), %xmm0
addsd -0x98(%rbp), %xmm0
callq 0x12160
movsd -0x2f0(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x2e8(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0xf0(%rbp), %xmm0
movsd %xmm0, -0x2e0(%rbp)
movsd -0x108(%rbp), %xmm0
movsd %xmm0, -0x2d8(%rbp)
movsd -0xe0(%rbp), %xmm0
addsd -0x98(%rbp), %xmm0
callq 0x10330
movsd -0x2e0(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x2d8(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa8(%rbp)
movq -0x270(%rbp), %rdi
movq -0x28(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
callq 0x10c40
movl %eax, -0x114(%rbp)
cmpl $0x0, -0x114(%rbp)
je 0x314c2
jmp 0x31404
movq 0x55b55(%rip), %rax     # 0x86f60
cmpl $0x31, 0xd670(%rax)
jge 0x314b4
movq 0x55b41(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x55b33(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x49dea(%rip), %rsi     # 0x7b22c
movl $0x50, %edx
callq 0x10840
movq 0x55b0d(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x55aff(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x55ae7(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x55ad7(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x55aca(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x55abc(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl -0x114(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x31d3a
jmp 0x314c4
jmp 0x31bc6
callq 0x103d0
movq %rax, %rdi
callq 0x11aa0
movq %rax, %rsi
addq $0x8, %rsi
leaq -0x188(%rbp), %rdi
movl $0x70, %edx
callq 0x10e60
movsd -0x160(%rbp), %xmm0
subsd -0x170(%rbp), %xmm0
movsd -0x168(%rbp), %xmm1
subsd -0x178(%rbp), %xmm1
callq 0x10460
movsd %xmm0, -0x190(%rbp)
movsd -0x38(%rbp), %xmm0
subsd -0xd0(%rbp), %xmm0
movsd -0x30(%rbp), %xmm1
subsd -0xc8(%rbp), %xmm1
callq 0x101d0
movsd %xmm0, -0x1a0(%rbp)
cmpl $0x1, -0x158(%rbp)
jne 0x31561
fldl -0x1a0(%rbp)
fldt 0x45ad9(%rip)           # 0x77030
faddp %st, %st(1)
fstpt -0x304(%rbp)
jmp 0x31575
fldl -0x1a0(%rbp)
fldt 0x45ad3(%rip)           # 0x77040
faddp %st, %st(1)
fstpt -0x304(%rbp)
fldt -0x304(%rbp)
fstpl -0x220(%rbp)
movsd -0x220(%rbp), %xmm0
movsd %xmm0, -0x1a8(%rbp)
movsd -0x160(%rbp), %xmm0
subsd -0xd0(%rbp), %xmm0
movsd -0x168(%rbp), %xmm1
subsd -0xc8(%rbp), %xmm1
callq 0x101d0
movsd %xmm0, -0x1b0(%rbp)
cmpl $0x2, -0xb4(%rbp)
jne 0x315d0
cmpl $0x1, -0x158(%rbp)
je 0x315e2
cmpl $0x1, -0xb4(%rbp)
jne 0x315fc
cmpl $-0x1, -0x158(%rbp)
jne 0x315fc
movsd -0x190(%rbp), %xmm0
addsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x198(%rbp)
jmp 0x31614
movsd -0x190(%rbp), %xmm0
subsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x198(%rbp)
movsd -0x1a8(%rbp), %xmm0
subsd -0x1b0(%rbp), %xmm0
movsd %xmm0, -0x1b8(%rbp)
movsd -0x198(%rbp), %xmm0
movsd %xmm0, -0x310(%rbp)
movsd -0x1b8(%rbp), %xmm0
callq 0x12160
movaps %xmm0, %xmm1
movsd -0x310(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1c0(%rbp)
cmpl $0x2, -0xb4(%rbp)
jne 0x31672
cmpl $0x1, -0x158(%rbp)
je 0x3168c
cmpl $0x1, -0xb4(%rbp)
jne 0x3185f
cmpl $-0x1, -0x158(%rbp)
jne 0x3185f
movsd -0x1c0(%rbp), %xmm0
subsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x1c8(%rbp)
movsd -0x1c8(%rbp), %xmm0
divsd -0x190(%rbp), %xmm0
movsd %xmm0, -0x1d8(%rbp)
movsd -0x1d8(%rbp), %xmm0
movsd 0x47744(%rip), %xmm1    # 0x78e10
ucomisd %xmm1, %xmm0
ja 0x316e8
movsd 0x47186(%rip), %xmm0    # 0x78860
ucomisd -0x1d8(%rbp), %xmm0
jbe 0x317c0
jmp 0x316ea
leaq 0x49c06(%rip), %rdi     # 0x7b2f7
callq 0x10380
movq -0x270(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x55852(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x55841(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x55833(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x49aea(%rip), %rsi     # 0x7b22c
movl $0x50, %edx
callq 0x10840
movq 0x5580d(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x557ff(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x557e7(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x557d7(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x557ca(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x557bc(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x31d3a
jmp 0x317c2
cmpl $0x1, -0x158(%rbp)
jne 0x31815
movsd -0x1d8(%rbp), %xmm0
callq 0x110b0
movaps %xmm0, %xmm1
movsd -0x1a8(%rbp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x258(%rbp)
fldl -0x258(%rbp)
fldt 0x476c5(%rip)           # 0x78ec0
faddp %st, %st(1)
fstpl -0x260(%rbp)
movsd -0x260(%rbp), %xmm0
movsd %xmm0, -0x1d0(%rbp)
jmp 0x3185a
movsd -0x1d8(%rbp), %xmm0
callq 0x110b0
movsd -0x1a8(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x248(%rbp)
fldl -0x248(%rbp)
fldt 0x4767e(%rip)           # 0x78ec0
faddp %st, %st(1)
fstpl -0x250(%rbp)
movsd -0x250(%rbp), %xmm0
movsd %xmm0, -0x1d0(%rbp)
jmp 0x31a2f
movsd -0x1c0(%rbp), %xmm0
addsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0x1c8(%rbp)
movsd -0x1c8(%rbp), %xmm0
divsd -0x190(%rbp), %xmm0
movsd %xmm0, -0x1e0(%rbp)
movsd -0x1e0(%rbp), %xmm0
movsd 0x47571(%rip), %xmm1    # 0x78e10
ucomisd %xmm1, %xmm0
ja 0x318bb
movsd 0x46fb3(%rip), %xmm0    # 0x78860
ucomisd -0x1e0(%rbp), %xmm0
jbe 0x31993
jmp 0x318bd
leaq 0x49a33(%rip), %rdi     # 0x7b2f7
callq 0x10380
movq -0x270(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x5567f(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x5566e(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x55660(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x49917(%rip), %rsi     # 0x7b22c
movl $0x50, %edx
callq 0x10840
movq 0x5563a(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x5562c(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x55614(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x55604(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x555f7(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x555e9(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x31d3a
jmp 0x31995
cmpl $0x1, -0x158(%rbp)
jne 0x319e5
movsd -0x1e0(%rbp), %xmm0
callq 0x110b0
movsd -0x1a8(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x238(%rbp)
fldl -0x238(%rbp)
fldt 0x474f5(%rip)           # 0x78ec0
faddp %st, %st(1)
fstpl -0x240(%rbp)
movsd -0x240(%rbp), %xmm0
movsd %xmm0, -0x1d0(%rbp)
jmp 0x31a2d
movsd -0x1e0(%rbp), %xmm0
callq 0x110b0
movaps %xmm0, %xmm1
movsd -0x1a8(%rbp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x228(%rbp)
fldl -0x228(%rbp)
fldt 0x474ab(%rip)           # 0x78ec0
faddp %st, %st(1)
fstpl -0x230(%rbp)
movsd -0x230(%rbp), %xmm0
movsd %xmm0, -0x1d0(%rbp)
jmp 0x31a2f
movsd -0x168(%rbp), %xmm0
movsd %xmm0, -0x330(%rbp)
movsd -0x190(%rbp), %xmm0
movsd %xmm0, -0x328(%rbp)
movsd -0x1d0(%rbp), %xmm0
callq 0x12160
movsd -0x330(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x328(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movsd -0x160(%rbp), %xmm0
movsd %xmm0, -0x320(%rbp)
movsd -0x190(%rbp), %xmm0
movsd %xmm0, -0x318(%rbp)
movsd -0x1d0(%rbp), %xmm0
callq 0x10330
movsd -0x320(%rbp), %xmm1
movaps %xmm0, %xmm2
movsd -0x318(%rbp), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa8(%rbp)
movq -0x270(%rbp), %rdi
movq -0x28(%rbp), %rsi
movsd -0xa0(%rbp), %xmm0
movsd -0xa8(%rbp), %xmm1
callq 0x10c40
movl %eax, -0x1e4(%rbp)
cmpl $0x0, -0x1e4(%rbp)
je 0x31bc2
jmp 0x31b04
movq 0x55455(%rip), %rax     # 0x86f60
cmpl $0x31, 0xd670(%rax)
jge 0x31bb4
movq 0x55441(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x55433(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x496ea(%rip), %rsi     # 0x7b22c
movl $0x50, %edx
callq 0x10840
movq 0x5540d(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x553ff(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x553e7(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x553d7(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x553ca(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x553bc(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl -0x1e4(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x31d3a
jmp 0x31bc4
jmp 0x31bc6
jmp 0x31be6
movq -0x28(%rbp), %rdi
callq 0x10500
movsd -0xe8(%rbp), %xmm0
movsd -0xf0(%rbp), %xmm1
callq 0x11060
jmp 0x31be8
cmpl $0x0, -0x14(%rbp)
jne 0x31bfe
movq 0x553d3(%rip), %rax     # 0x86fc8
movq %rax, -0x338(%rbp)
jmp 0x31c0e
movq 0x55373(%rip), %rax     # 0x86f78
movq %rax, -0x338(%rbp)
jmp 0x31c0e
movq -0x338(%rbp), %rax
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rcx
movl 0x1d0(%rcx), %esi
movsd -0x30(%rbp), %xmm0
subsd -0xc8(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
subsd -0xd0(%rbp), %xmm1
movsd -0x40(%rbp), %xmm2
subsd -0xd8(%rbp), %xmm2
movsd -0x80(%rbp), %xmm3
movsd -0x88(%rbp), %xmm4
movsd -0x40(%rbp), %xmm5
movsd -0x48(%rbp), %xmm6
movsd -0x50(%rbp), %xmm7
movsd -0x58(%rbp), %xmm11
movsd -0x60(%rbp), %xmm10
movsd -0x68(%rbp), %xmm9
movsd 0x10(%rbp), %xmm8
movsd %xmm11, (%rsp)
movsd %xmm10, 0x8(%rsp)
movsd %xmm9, 0x10(%rsp)
movsd %xmm8, 0x18(%rsp)
callq *%rax
movq -0x270(%rbp), %rdi
movq -0x28(%rbp), %rsi
movsd -0x80(%rbp), %xmm0
movsd -0x88(%rbp), %xmm1
movsd -0x40(%rbp), %xmm2
callq 0x11c70
movq -0x270(%rbp), %rdi
movsd -0x48(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movsd -0x50(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x20(%rax)
movsd -0x58(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x38(%rax)
movsd -0x60(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x50(%rax)
movsd -0x68(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x68(%rax)
movsd 0x10(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x80(%rax)
movq -0x28(%rbp), %rsi
movsd -0x30(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movsd -0x40(%rbp), %xmm2
callq 0x115b0
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x360, %rsp            # imm = 0x360
popq %rbp
retq
nopw %cs:(%rax,%rax)