// File: sundale[P]gcode/rs274ngc/interp_find.cc
// Function: Interp::find_ends(block_struct*, setup_struct*, double*, double*, double*, double*, double*, double*, double*, double*, double*)
int Interp::find_ends(block_pointer block,       //!< pointer to a block of RS274/NGC instructions
                      setup_pointer s,    //!< pointer to machine settings                 
                      double *px,        //!< pointer to end_x                            
                      double *py,        //!< pointer to end_y                            
                      double *pz,        //!< pointer to end_z                            
                      double *AA_p,      //!< pointer to end_a                      
                      double *BB_p,      //!< pointer to end_b                      
                      double *CC_p,      //!< pointer to end_c                      
                      double *u_p, double *v_p, double *w_p)
{
    int middle;
    int comp;

    middle = s->cutter_comp_firstmove == OFF;
    comp = (s->cutter_comp_side != OFF);

    if (block->g_modes[0] == G_53) {      /* distance mode is absolute in this case */
#ifdef DEBUG_EMC
        COMMENT("interpreter: offsets temporarily suspended");
#endif
        CHKS((block->radius_flag || block->theta_flag), _("Cannot use polar coordinates with G53"));

        double cx = s->current_x;
        double cy = s->current_y;
        rotate(&cx, &cy, s->rotation_xy);

        if(block->x_flag == ON) {
            *px = block->x_number - s->origin_offset_x - s->axis_offset_x - s->tool_offset.tran.x;
        } else {
            *px = cx;
        }

        if(block->y_flag == ON) {
            *py = block->y_number - s->origin_offset_y - s->axis_offset_y - s->tool_offset.tran.y;
        } else {
            *py = cy;
        }

        rotate(px, py, -s->rotation_xy);

        if(block->z_flag == ON) {
            *pz = block->z_number - s->origin_offset_z - s->axis_offset_z - s->tool_offset.tran.z;
        } else {
            *pz = s->current_z;
        }

        if(block->a_flag == ON) {
            if(s->a_axis_wrapped) {
                CHP(unwrap_rotary(AA_p, block->a_number, 
                                  block->a_number - s->AA_origin_offset - s->AA_axis_offset - s->tool_offset.a,
                                  s->AA_current, 'A'));
            } else {
                *AA_p = block->a_number - s->AA_origin_offset - s->AA_axis_offset;
            }
        } else {
            *AA_p = s->AA_current;
        }

        if(block->b_flag == ON) {
            if(s->b_axis_wrapped) {
                CHP(unwrap_rotary(BB_p, block->b_number, 
                                  block->b_number - s->BB_origin_offset - s->BB_axis_offset - s->tool_offset.b,
                                  s->BB_current, 'B'));
            } else {
                *BB_p = block->b_number - s->BB_origin_offset - s->BB_axis_offset;
            }
        } else {
            *BB_p = s->BB_current;
        }

        if(block->c_flag == ON) {
            if(s->c_axis_wrapped) {
                CHP(unwrap_rotary(CC_p, block->c_number, 
                                  block->c_number - s->CC_origin_offset - s->CC_axis_offset - s->tool_offset.c,
                                  s->CC_current, 'C'));
            } else {
                *CC_p = block->c_number - s->CC_origin_offset - s->CC_axis_offset;
            }
        } else {
            *CC_p = s->CC_current;
        }

        if(block->u_flag == ON) {
            *u_p = block->u_number - s->u_origin_offset - s->u_axis_offset - s->tool_offset.u;
        } else {
            *u_p = s->u_current;
        }

        if(block->v_flag == ON) {
            *v_p = block->v_number - s->v_origin_offset - s->v_axis_offset - s->tool_offset.v;
        } else {
            *v_p = s->v_current;
        }

        if(block->w_flag == ON) {
            *w_p = block->w_number - s->w_origin_offset - s->w_axis_offset - s->tool_offset.w;
        } else {
            *w_p = s->w_current;
        }
    } else if (s->distance_mode == MODE_ABSOLUTE) {

        if(block->x_flag == ON) {
            *px = block->x_number;
        } else {
            // both cutter comp planes affect X ...
            *px = (comp && middle) ? s->program_x : s->current_x;
        }

        if(block->y_flag == ON) {
            *py = block->y_number;
        } else {
            // but only XY affects Y ...
            *py = (comp && middle && s->plane == CANON_PLANE_XY) ? s->program_y : s->current_y;
        }

        if(block->radius_flag == ON && block->theta_flag == ON) {
            CHKS((block->x_flag == ON || block->y_flag == ON), _("Cannot specify X or Y words with polar coordinate"));
            *px = block->radius * cos(D2R(block->theta));
            *py = block->radius * sin(D2R(block->theta));
        } else if(block->radius_flag == ON) {
            double theta;
            CHKS((block->x_flag == ON || block->y_flag == ON), _("Cannot specify X or Y words with polar coordinate"));
            CHKS((*py == 0 && *px == 0), _("Must specify angle in polar coordinate if at the origin"));
            theta = atan2(*py, *px);
            *px = block->radius * cos(theta);
            *py = block->radius * sin(theta);
        } else  if(block->theta_flag == ON) {
            double radius;
            CHKS((block->x_flag == ON || block->y_flag == ON), _("Cannot specify X or Y words with polar coordinate"));
            radius = hypot(*py, *px);
            *px = radius * cos(D2R(block->theta));
            *py = radius * sin(D2R(block->theta));
        }

        if(block->z_flag == ON) {
            *pz = block->z_number;
        } else {
            // and only XZ affects Z.
            *pz = (comp && middle && s->plane == CANON_PLANE_XZ) ? s->program_z : s->current_z;
        }

        if(block->a_flag == ON) {
            if(s->a_axis_wrapped) {
                CHP(unwrap_rotary(AA_p, block->a_number, block->a_number, s->AA_current, 'A'));
            } else {
                *AA_p = block->a_number;
            }
        } else {
            *AA_p = s->AA_current;
        }

        if(block->b_flag == ON) {
            if(s->b_axis_wrapped) {
                CHP(unwrap_rotary(BB_p, block->b_number, block->b_number, s->BB_current, 'B'));
            } else {
                *BB_p = block->b_number;
            }
        } else {
            *BB_p = s->BB_current;
        }

        if(block->c_flag == ON) {
            if(s->c_axis_wrapped) {
                CHP(unwrap_rotary(CC_p, block->c_number, block->c_number, s->CC_current, 'C'));
            } else {
                *CC_p = block->c_number;
            }
        } else {
            *CC_p = s->CC_current;
        }

        *u_p = (block->u_flag == ON) ? block->u_number : s->u_current;
        *v_p = (block->v_flag == ON) ? block->v_number : s->v_current;
        *w_p = (block->w_flag == ON) ? block->w_number : s->w_current;

    } else {                      /* mode is MODE_INCREMENTAL */

        // both cutter comp planes affect X ...
        *px = (comp && middle) ? s->program_x: s->current_x;
        if(block->x_flag == ON) *px += block->x_number;

        // but only XY affects Y ...
        *py = (comp && middle && s->plane == CANON_PLANE_XY) ? s->program_y: s->current_y;
        if(block->y_flag == ON) *py += block->y_number;

        if(block->radius_flag == ON) {
            double radius, theta;
            CHKS((block->x_flag == ON || block->y_flag == ON), _("Cannot specify X or Y words with polar coordinate"));
            CHKS((*py == 0 && *px == 0), _("Incremental motion with polar coordinates is indeterminate when at the origin"));
            theta = atan2(*py, *px);
            radius = hypot(*py, *px) + block->radius;
            *px = radius * cos(theta);
            *py = radius * sin(theta);
        }

        if(block->theta_flag == ON) {
            double radius, theta;
            CHKS((block->x_flag == ON || block->y_flag == ON), _("Cannot specify X or Y words with polar coordinate"));
            CHKS((*py == 0 && *px == 0), _("G91 motion with polar coordinates is indeterminate when at the origin"));
            theta = atan2(*py, *px) + D2R(block->theta);
            radius = hypot(*py, *px);
            *px = radius * cos(theta);
            *py = radius * sin(theta);
        }

        // and only XZ affects Z.
        *pz = (comp && middle && s->plane == CANON_PLANE_XZ) ? s->program_z: s->current_z;
        if(block->z_flag == ON) *pz += block->z_number;

        *AA_p = s->AA_current;
        if(block->a_flag == ON) *AA_p += block->a_number;

        *BB_p = s->BB_current;
        if(block->b_flag == ON) *BB_p += block->b_number;

        *CC_p = s->CC_current;
        if(block->c_flag == ON) *CC_p += block->c_number;

        *u_p = s->u_current;
        if(block->u_flag == ON) *u_p += block->u_number;

        *v_p = s->v_current;
        if(block->v_flag == ON) *v_p += block->v_number;

        *w_p = s->w_current;
        if(block->w_flag == ON) *w_p += block->w_number;
    }
    return INTERP_OK;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq 0x38(%rbp), %rax
movq 0x30(%rbp), %rax
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x20(%rbp), %rax
movb 0xc689(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x3c(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, 0x624(%rax)
setne %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x40(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x212, 0x150(%rax)     # imm = 0x212
jne 0x57829
jmp 0x5701f
movq -0x18(%rbp), %rax
cmpl $0x0, 0x2a0(%rax)
jne 0x5703d
movq -0x18(%rbp), %rax
cmpl $0x0, 0x2b0(%rax)
je 0x57115
jmp 0x5703f
leaq 0x25a94(%rip), %rdi     # 0x7cada
callq 0x10380
movq -0xa8(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x2fefd(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x2feec(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2fede(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x25a69(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2feb8(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2feaa(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2fe92(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2fe82(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2fe75(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2fe67(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x58d59
jmp 0x57117
movq -0xa8(%rbp), %rdi
movq -0x20(%rbp), %rax
movsd 0x600(%rax), %xmm0
movsd %xmm0, -0x48(%rbp)
movq -0x20(%rbp), %rax
movsd 0x608(%rax), %xmm0
movsd %xmm0, -0x50(%rbp)
movq -0x20(%rbp), %rax
movsd 0x17b8(%rax), %xmm0
leaq -0x48(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0x11cc0
movq -0x18(%rbp), %rax
movb 0x270(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x571a7
movq -0x18(%rbp), %rax
movsd 0x278(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x17a0(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x118(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0xd678(%rax), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x571b4
movsd -0x48(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x280(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x57202
movq -0x18(%rbp), %rax
movsd 0x288(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x17a8(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x120(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0xd680(%rax), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x5720f
movsd -0x50(%rbp), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
movq -0xa8(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x20(%rbp), %rax
movsd 0x17b8(%rax), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
callq 0x11cc0
movq -0x18(%rbp), %rax
movb 0x290(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x57294
movq -0x18(%rbp), %rax
movsd 0x298(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x17b0(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x128(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0xd688(%rax), %xmm0
movq -0x38(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x572a8
movq -0x20(%rbp), %rax
movsd 0x610(%rax), %xmm0
movq -0x38(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb (%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x5740e
movq -0x20(%rbp), %rax
cmpl $0x0, 0x1e6cc(%rax)
je 0x573ea
jmp 0x572cf
movq -0xa8(%rbp), %rdi
movq 0x10(%rbp), %rsi
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm1
movq -0x20(%rbp), %rax
subsd 0x10(%rax), %xmm1
movq -0x20(%rbp), %rax
subsd (%rax), %xmm1
movq -0x20(%rbp), %rax
subsd 0xd690(%rax), %xmm1
movq -0x20(%rbp), %rax
movsd 0x8(%rax), %xmm2
movl $0x41, %edx
callq 0x11430
movl %eax, -0x54(%rbp)
cmpl $0x0, -0x54(%rbp)
je 0x573e6
jmp 0x5732b
movq 0x2fc2e(%rip), %rax     # 0x86f60
cmpl $0x31, 0xd670(%rax)
jge 0x573db
movq 0x2fc1a(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2fc0c(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x25797(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2fbe6(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2fbd8(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2fbc0(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2fbb0(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2fba3(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2fb95(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl -0x54(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x58d59
jmp 0x573e8
jmp 0x5740c
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x10(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd (%rax), %xmm0
movq 0x10(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x5741f
movq -0x20(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq 0x10(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x10(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x57588
movq -0x20(%rbp), %rax
cmpl $0x0, 0x1e6d0(%rax)
je 0x57563
jmp 0x57447
movq -0xa8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x18(%rbp), %rax
movsd 0x18(%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x18(%rax), %xmm1
movq -0x20(%rbp), %rax
subsd 0x28(%rax), %xmm1
movq -0x20(%rbp), %rax
subsd 0x18(%rax), %xmm1
movq -0x20(%rbp), %rax
subsd 0xd698(%rax), %xmm1
movq -0x20(%rbp), %rax
movsd 0x20(%rax), %xmm2
movl $0x42, %edx
callq 0x11430
movl %eax, -0x58(%rbp)
cmpl $0x0, -0x58(%rbp)
je 0x5755f
jmp 0x574a4
movq 0x2fab5(%rip), %rax     # 0x86f60
cmpl $0x31, 0xd670(%rax)
jge 0x57554
movq 0x2faa1(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2fa93(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x2561e(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2fa6d(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2fa5f(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2fa47(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2fa37(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2fa2a(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2fa1c(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl -0x58(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x58d59
jmp 0x57561
jmp 0x57586
movq -0x18(%rbp), %rax
movsd 0x18(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x28(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x18(%rax), %xmm0
movq 0x18(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x57599
movq -0x20(%rbp), %rax
movsd 0x20(%rax), %xmm0
movq 0x18(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x20(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x57702
movq -0x20(%rbp), %rax
cmpl $0x0, 0x1e6d4(%rax)
je 0x576dd
jmp 0x575c1
movq -0xa8(%rbp), %rdi
movq 0x20(%rbp), %rsi
movq -0x18(%rbp), %rax
movsd 0x28(%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x28(%rax), %xmm1
movq -0x20(%rbp), %rax
subsd 0x40(%rax), %xmm1
movq -0x20(%rbp), %rax
subsd 0x30(%rax), %xmm1
movq -0x20(%rbp), %rax
subsd 0xd6a0(%rax), %xmm1
movq -0x20(%rbp), %rax
movsd 0x38(%rax), %xmm2
movl $0x43, %edx
callq 0x11430
movl %eax, -0x5c(%rbp)
cmpl $0x0, -0x5c(%rbp)
je 0x576d9
jmp 0x5761e
movq 0x2f93b(%rip), %rax     # 0x86f60
cmpl $0x31, 0xd670(%rax)
jge 0x576ce
movq 0x2f927(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2f919(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x254a4(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2f8f3(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2f8e5(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2f8cd(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2f8bd(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2f8b0(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2f8a2(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl -0x5c(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x58d59
jmp 0x576db
jmp 0x57700
movq -0x18(%rbp), %rax
movsd 0x28(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x40(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x30(%rax), %xmm0
movq 0x20(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x57713
movq -0x20(%rbp), %rax
movsd 0x38(%rax), %xmm0
movq 0x20(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x244(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x5775b
movq -0x18(%rbp), %rax
movsd 0x248(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x58(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x48(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0xd6a8(%rax), %xmm0
movq 0x28(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x5776c
movq -0x20(%rbp), %rax
movsd 0x50(%rax), %xmm0
movq 0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x250(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x577b4
movq -0x18(%rbp), %rax
movsd 0x258(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x70(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x60(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0xd6b0(%rax), %xmm0
movq 0x30(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x577c5
movq -0x20(%rbp), %rax
movsd 0x68(%rax), %xmm0
movq 0x30(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x260(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x57810
movq -0x18(%rbp), %rax
movsd 0x268(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x88(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x78(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0xd6b8(%rax), %xmm0
movq 0x38(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x57824
movq -0x20(%rbp), %rax
movsd 0x80(%rax), %xmm0
movq 0x38(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x58d52
movq -0x20(%rbp), %rax
cmpl $0x0, 0x668(%rax)
jne 0x584b6
movq -0x18(%rbp), %rax
movb 0x270(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x57864
movq -0x18(%rbp), %rax
movsd 0x278(%rax), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x578aa
cmpl $0x0, -0x40(%rbp)
je 0x57886
cmpl $0x0, -0x3c(%rbp)
je 0x57886
movq -0x20(%rbp), %rax
movsd 0xc690(%rax), %xmm0
movsd %xmm0, -0xb0(%rbp)
jmp 0x5789a
movq -0x20(%rbp), %rax
movsd 0x600(%rax), %xmm0
movsd %xmm0, -0xb0(%rbp)
movsd -0xb0(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x280(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x578d4
movq -0x18(%rbp), %rax
movsd 0x288(%rax), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x57927
cmpl $0x0, -0x40(%rbp)
je 0x57903
cmpl $0x0, -0x3c(%rbp)
je 0x57903
movq -0x20(%rbp), %rax
cmpl $0x1, 0xc67c(%rax)
jne 0x57903
movq -0x20(%rbp), %rax
movsd 0xc698(%rax), %xmm0
movsd %xmm0, -0xb8(%rbp)
jmp 0x57917
movq -0x20(%rbp), %rax
movsd 0x608(%rax), %xmm0
movsd %xmm0, -0xb8(%rbp)
movsd -0xb8(%rbp), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
cmpl $0x1, 0x2a0(%rax)
jne 0x57af6
movq -0x18(%rbp), %rax
cmpl $0x1, 0x2b0(%rax)
jne 0x57af6
jmp 0x5794b
movq -0x18(%rbp), %rax
movb 0x270(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
je 0x57977
movq -0x18(%rbp), %rax
movb 0x280(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x57a4f
jmp 0x57979
leaq 0x2520e(%rip), %rdi     # 0x7cb8e
callq 0x10380
movq -0xa8(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x2f5c3(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x2f5b2(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2f5a4(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x2512f(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2f57e(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2f570(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2f558(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2f548(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2f53b(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2f52d(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x58d59
jmp 0x57a51
movq -0x18(%rbp), %rax
movsd 0x2a8(%rax), %xmm0
movsd %xmm0, -0xc8(%rbp)
movq -0x18(%rbp), %rax
movsd 0x213e7(%rip), %xmm0    # 0x78e58
mulsd 0x2b8(%rax), %xmm0
movsd 0x213cf(%rip), %xmm1    # 0x78e50
divsd %xmm1, %xmm0
callq 0x12160
movaps %xmm0, %xmm1
movsd -0xc8(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movsd 0x2a8(%rax), %xmm0
movsd %xmm0, -0xc0(%rbp)
movq -0x18(%rbp), %rax
movsd 0x21397(%rip), %xmm0    # 0x78e58
mulsd 0x2b8(%rax), %xmm0
movsd 0x2137f(%rip), %xmm1    # 0x78e50
divsd %xmm1, %xmm0
callq 0x10330
movaps %xmm0, %xmm1
movsd -0xc0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x57f73
movq -0x18(%rbp), %rax
cmpl $0x1, 0x2a0(%rax)
jne 0x57daa
jmp 0x57b09
movq -0x18(%rbp), %rax
movb 0x270(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
je 0x57b35
movq -0x18(%rbp), %rax
movb 0x280(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x57c0d
jmp 0x57b37
leaq 0x25050(%rip), %rdi     # 0x7cb8e
callq 0x10380
movq -0xa8(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x2f405(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x2f3f4(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2f3e6(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x24f71(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2f3c0(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2f3b2(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2f39a(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2f38a(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2f37d(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2f36f(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x58d59
jmp 0x57c0f
jmp 0x57c11
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x57d1f
jp 0x57d1f
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x57d1f
jp 0x57d1f
jmp 0x57c49
leaq 0x24f70(%rip), %rdi     # 0x7cbc0
callq 0x10380
movq -0xa8(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x2f2f3(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x2f2e2(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2f2d4(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x24e5f(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2f2ae(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2f2a0(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2f288(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2f278(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2f26b(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2f25d(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x58d59
jmp 0x57d21
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
movsd (%rax), %xmm1
callq 0x101d0
movsd %xmm0, -0x68(%rbp)
movq -0x18(%rbp), %rax
movsd 0x2a8(%rax), %xmm0
movsd %xmm0, -0xd8(%rbp)
movsd -0x68(%rbp), %xmm0
callq 0x12160
movaps %xmm0, %xmm1
movsd -0xd8(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movsd 0x2a8(%rax), %xmm0
movsd %xmm0, -0xd0(%rbp)
movsd -0x68(%rbp), %xmm0
callq 0x10330
movaps %xmm0, %xmm1
movsd -0xd0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x57f71
movq -0x18(%rbp), %rax
cmpl $0x1, 0x2b0(%rax)
jne 0x57f6f
jmp 0x57dbd
movq -0x18(%rbp), %rax
movb 0x270(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
je 0x57de9
movq -0x18(%rbp), %rax
movb 0x280(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x57ec1
jmp 0x57deb
leaq 0x24d9c(%rip), %rdi     # 0x7cb8e
callq 0x10380
movq -0xa8(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x2f151(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x2f140(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2f132(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x24cbd(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2f10c(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2f0fe(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2f0e6(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2f0d6(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2f0c9(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2f0bb(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x58d59
jmp 0x57ec3
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
movsd (%rax), %xmm1
callq 0x10460
movsd %xmm0, -0x70(%rbp)
movsd -0x70(%rbp), %xmm0
movsd %xmm0, -0xe8(%rbp)
movq -0x18(%rbp), %rax
movsd 0x20f62(%rip), %xmm0    # 0x78e58
mulsd 0x2b8(%rax), %xmm0
movsd 0x20f4a(%rip), %xmm1    # 0x78e50
divsd %xmm1, %xmm0
callq 0x12160
movaps %xmm0, %xmm1
movsd -0xe8(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0x70(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
movq -0x18(%rbp), %rax
movsd 0x20f19(%rip), %xmm0    # 0x78e58
mulsd 0x2b8(%rax), %xmm0
movsd 0x20f01(%rip), %xmm1    # 0x78e50
divsd %xmm1, %xmm0
callq 0x10330
movaps %xmm0, %xmm1
movsd -0xe0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x57f71
jmp 0x57f73
movq -0x18(%rbp), %rax
movb 0x290(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x57f9d
movq -0x18(%rbp), %rax
movsd 0x298(%rax), %xmm0
movq -0x38(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x57ff0
cmpl $0x0, -0x40(%rbp)
je 0x57fcc
cmpl $0x0, -0x3c(%rbp)
je 0x57fcc
movq -0x20(%rbp), %rax
cmpl $0x3, 0xc67c(%rax)
jne 0x57fcc
movq -0x20(%rbp), %rax
movsd 0xc6a0(%rax), %xmm0
movsd %xmm0, -0xf0(%rbp)
jmp 0x57fe0
movq -0x20(%rbp), %rax
movsd 0x610(%rax), %xmm0
movsd %xmm0, -0xf0(%rbp)
movsd -0xf0(%rbp), %xmm0
movq -0x38(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb (%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58128
movq -0x20(%rbp), %rax
cmpl $0x0, 0x1e6cc(%rax)
je 0x58115
jmp 0x58017
movq -0xa8(%rbp), %rdi
movq 0x10(%rbp), %rsi
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm1
movq -0x20(%rbp), %rax
movsd 0x8(%rax), %xmm2
movl $0x41, %edx
callq 0x11430
movl %eax, -0x74(%rbp)
cmpl $0x0, -0x74(%rbp)
je 0x58111
jmp 0x58056
movq 0x2ef03(%rip), %rax     # 0x86f60
cmpl $0x31, 0xd670(%rax)
jge 0x58106
movq 0x2eeef(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2eee1(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x24a6c(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2eebb(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2eead(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2ee95(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2ee85(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2ee78(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2ee6a(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl -0x74(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x58d59
jmp 0x58113
jmp 0x58126
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq 0x10(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x58139
movq -0x20(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq 0x10(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x10(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58272
movq -0x20(%rbp), %rax
cmpl $0x0, 0x1e6d0(%rax)
je 0x5825f
jmp 0x58161
movq -0xa8(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x18(%rbp), %rax
movsd 0x18(%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x18(%rax), %xmm1
movq -0x20(%rbp), %rax
movsd 0x20(%rax), %xmm2
movl $0x42, %edx
callq 0x11430
movl %eax, -0x78(%rbp)
cmpl $0x0, -0x78(%rbp)
je 0x5825b
jmp 0x581a0
movq 0x2edb9(%rip), %rax     # 0x86f60
cmpl $0x31, 0xd670(%rax)
jge 0x58250
movq 0x2eda5(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2ed97(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x24922(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2ed71(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2ed63(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2ed4b(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2ed3b(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2ed2e(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2ed20(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl -0x78(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x58d59
jmp 0x5825d
jmp 0x58270
movq -0x18(%rbp), %rax
movsd 0x18(%rax), %xmm0
movq 0x18(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x58283
movq -0x20(%rbp), %rax
movsd 0x20(%rax), %xmm0
movq 0x18(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x20(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x583bc
movq -0x20(%rbp), %rax
cmpl $0x0, 0x1e6d4(%rax)
je 0x583a9
jmp 0x582ab
movq -0xa8(%rbp), %rdi
movq 0x20(%rbp), %rsi
movq -0x18(%rbp), %rax
movsd 0x28(%rax), %xmm0
movq -0x18(%rbp), %rax
movsd 0x28(%rax), %xmm1
movq -0x20(%rbp), %rax
movsd 0x38(%rax), %xmm2
movl $0x43, %edx
callq 0x11430
movl %eax, -0x7c(%rbp)
cmpl $0x0, -0x7c(%rbp)
je 0x583a5
jmp 0x582ea
movq 0x2ec6f(%rip), %rax     # 0x86f60
cmpl $0x31, 0xd670(%rax)
jge 0x5839a
movq 0x2ec5b(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2ec4d(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x247d8(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2ec27(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2ec19(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2ec01(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2ebf1(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2ebe4(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2ebd6(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl -0x7c(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x58d59
jmp 0x583a7
jmp 0x583ba
movq -0x18(%rbp), %rax
movsd 0x28(%rax), %xmm0
movq 0x20(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x583cd
movq -0x20(%rbp), %rax
movsd 0x38(%rax), %xmm0
movq 0x20(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x244(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x583f7
movq -0x18(%rbp), %rax
movsd 0x248(%rax), %xmm0
movsd %xmm0, -0xf8(%rbp)
jmp 0x58408
movq -0x20(%rbp), %rax
movsd 0x50(%rax), %xmm0
movsd %xmm0, -0xf8(%rbp)
movsd -0xf8(%rbp), %xmm0
movq 0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x250(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58442
movq -0x18(%rbp), %rax
movsd 0x258(%rax), %xmm0
movsd %xmm0, -0x100(%rbp)
jmp 0x58453
movq -0x20(%rbp), %rax
movsd 0x68(%rax), %xmm0
movsd %xmm0, -0x100(%rbp)
movsd -0x100(%rbp), %xmm0
movq 0x30(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x260(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x5848d
movq -0x18(%rbp), %rax
movsd 0x268(%rax), %xmm0
movsd %xmm0, -0x108(%rbp)
jmp 0x584a1
movq -0x20(%rbp), %rax
movsd 0x80(%rax), %xmm0
movsd %xmm0, -0x108(%rbp)
movsd -0x108(%rbp), %xmm0
movq 0x38(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x58d50
cmpl $0x0, -0x40(%rbp)
je 0x584d8
cmpl $0x0, -0x3c(%rbp)
je 0x584d8
movq -0x20(%rbp), %rax
movsd 0xc690(%rax), %xmm0
movsd %xmm0, -0x110(%rbp)
jmp 0x584ec
movq -0x20(%rbp), %rax
movsd 0x600(%rax), %xmm0
movsd %xmm0, -0x110(%rbp)
movsd -0x110(%rbp), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x270(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58528
movq -0x18(%rbp), %rax
movsd 0x278(%rax), %xmm0
movq -0x28(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
cmpl $0x0, -0x40(%rbp)
je 0x58557
cmpl $0x0, -0x3c(%rbp)
je 0x58557
movq -0x20(%rbp), %rax
cmpl $0x1, 0xc67c(%rax)
jne 0x58557
movq -0x20(%rbp), %rax
movsd 0xc698(%rax), %xmm0
movsd %xmm0, -0x118(%rbp)
jmp 0x5856b
movq -0x20(%rbp), %rax
movsd 0x608(%rax), %xmm0
movsd %xmm0, -0x118(%rbp)
movsd -0x118(%rbp), %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x280(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x585a7
movq -0x18(%rbp), %rax
movsd 0x288(%rax), %xmm0
movq -0x30(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
cmpl $0x1, 0x2a0(%rax)
jne 0x58880
jmp 0x585ba
movq -0x18(%rbp), %rax
movb 0x270(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
je 0x585e6
movq -0x18(%rbp), %rax
movb 0x280(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x586be
jmp 0x585e8
leaq 0x2459f(%rip), %rdi     # 0x7cb8e
callq 0x10380
movq -0xa8(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x2e954(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x2e943(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2e935(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x244c0(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2e90f(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2e901(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2e8e9(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2e8d9(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2e8cc(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2e8be(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x58d59
jmp 0x586c0
jmp 0x586c2
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x587d0
jp 0x587d0
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x587d0
jp 0x587d0
jmp 0x586fa
leaq 0x23b92(%rip), %rdi     # 0x7c293
callq 0x10380
movq -0xa8(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x2e842(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x2e831(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2e823(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x243ae(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2e7fd(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2e7ef(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2e7d7(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2e7c7(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2e7ba(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2e7ac(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x58d59
jmp 0x587d2
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
movsd (%rax), %xmm1
callq 0x101d0
movsd %xmm0, -0x90(%rbp)
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
movsd (%rax), %xmm1
callq 0x10460
movq -0x18(%rbp), %rax
addsd 0x2a8(%rax), %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x128(%rbp)
movsd -0x90(%rbp), %xmm0
callq 0x12160
movaps %xmm0, %xmm1
movsd -0x128(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x120(%rbp)
movsd -0x90(%rbp), %xmm0
callq 0x10330
movaps %xmm0, %xmm1
movsd -0x120(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
cmpl $0x1, 0x2b0(%rax)
jne 0x58b71
jmp 0x58893
movq -0x18(%rbp), %rax
movb 0x270(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
je 0x588bf
movq -0x18(%rbp), %rax
movb 0x280(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58997
jmp 0x588c1
leaq 0x242c6(%rip), %rdi     # 0x7cb8e
callq 0x10380
movq -0xa8(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x2e67b(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x2e66a(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2e65c(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x241e7(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2e636(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2e628(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2e610(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2e600(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2e5f3(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2e5e5(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x58d59
jmp 0x58999
jmp 0x5899b
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x58aa9
jp 0x58aa9
movq -0x28(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x58aa9
jp 0x58aa9
jmp 0x589d3
leaq 0x2421e(%rip), %rdi     # 0x7cbf8
callq 0x10380
movq -0xa8(%rbp), %rdi
movq %rax, %rsi
movb $0x0, %al
callq 0x10df0
movq 0x2e569(%rip), %rax     # 0x86f60
movl $0x0, 0xd670(%rax)
movq 0x2e558(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rax
movq 0x2e54a(%rip), %rdi     # 0x86f60
addq $0xc6d0, %rdi           # imm = 0xC6D0
imulq $0x50, %rax, %rax
addq %rax, %rdi
leaq 0x240d5(%rip), %rsi     # 0x7cb00
movl $0x50, %edx
callq 0x10840
movq 0x2e524(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2e516(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x4f(%rax)
movq 0x2e4fe(%rip), %rax     # 0x86f60
movl 0xd670(%rax), %ecx
addl $0x1, %ecx
movq 0x2e4ee(%rip), %rax     # 0x86f60
movl %ecx, 0xd670(%rax)
movq 0x2e4e1(%rip), %rax     # 0x86f60
movslq 0xd670(%rax), %rcx
movq 0x2e4d3(%rip), %rax     # 0x86f60
addq $0xc6d0, %rax           # imm = 0xC6D0
imulq $0x50, %rcx, %rcx
addq %rcx, %rax
movb $0x0, (%rax)
movl $0x5, -0x4(%rbp)
jmp 0x58d59
jmp 0x58aab
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
movsd (%rax), %xmm1
callq 0x101d0
movq -0x18(%rbp), %rax
movsd 0x2038c(%rip), %xmm1    # 0x78e58
mulsd 0x2b8(%rax), %xmm1
movsd 0x20374(%rip), %xmm2    # 0x78e50
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0xa0(%rbp)
movq -0x30(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rax
movsd (%rax), %xmm1
callq 0x10460
movsd %xmm0, -0x98(%rbp)
movsd -0x98(%rbp), %xmm0
movsd %xmm0, -0x138(%rbp)
movsd -0xa0(%rbp), %xmm0
callq 0x12160
movaps %xmm0, %xmm1
movsd -0x138(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0x98(%rbp), %xmm0
movsd %xmm0, -0x130(%rbp)
movsd -0xa0(%rbp), %xmm0
callq 0x10330
movaps %xmm0, %xmm1
movsd -0x130(%rbp), %xmm0
mulsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
movsd %xmm0, (%rax)
cmpl $0x0, -0x40(%rbp)
je 0x58ba0
cmpl $0x0, -0x3c(%rbp)
je 0x58ba0
movq -0x20(%rbp), %rax
cmpl $0x3, 0xc67c(%rax)
jne 0x58ba0
movq -0x20(%rbp), %rax
movsd 0xc6a0(%rax), %xmm0
movsd %xmm0, -0x140(%rbp)
jmp 0x58bb4
movq -0x20(%rbp), %rax
movsd 0x610(%rax), %xmm0
movsd %xmm0, -0x140(%rbp)
movsd -0x140(%rbp), %xmm0
movq -0x38(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x290(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58bf0
movq -0x18(%rbp), %rax
movsd 0x298(%rax), %xmm0
movq -0x38(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq 0x10(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb (%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58c26
movq -0x18(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq 0x10(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movsd 0x20(%rax), %xmm0
movq 0x18(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x10(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58c5d
movq -0x18(%rbp), %rax
movsd 0x18(%rax), %xmm0
movq 0x18(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movsd 0x38(%rax), %xmm0
movq 0x20(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x20(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58c94
movq -0x18(%rbp), %rax
movsd 0x28(%rax), %xmm0
movq 0x20(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movsd 0x50(%rax), %xmm0
movq 0x28(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x244(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58cd1
movq -0x18(%rbp), %rax
movsd 0x248(%rax), %xmm0
movq 0x28(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movsd 0x68(%rax), %xmm0
movq 0x30(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x250(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58d0e
movq -0x18(%rbp), %rax
movsd 0x258(%rax), %xmm0
movq 0x30(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movsd 0x80(%rax), %xmm0
movq 0x38(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
movb 0x260(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x58d4e
movq -0x18(%rbp), %rax
movsd 0x268(%rax), %xmm0
movq 0x38(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
jmp 0x58d50
jmp 0x58d52
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
nopw %cs:(%rax,%rax)