// File: /workspace/github_c_makefile_star2_O0/Nealsbo[P]C-Software-Renderer/src/shader.c
// Function: Shader_Fragment
color_t Shader_Fragment( shader_t *s, obj_model_t *model, vec3 bary ) {
	vec3 fragPos, normal, ambient, diffuse, light_dir, view_dir, refl_dir, specular, res;
	vec2 uv;
	float diff, spec;
	//vec2 uv      = vec4_toVec2( vec4_byMat4( vec3_toVec4( bary ), s->var_uv ) );
	uv      = vec2_create( bary.x*s->uvs[0].x + bary.y*s->uvs[1].x + bary.z*s->uvs[2].x,
						   bary.x*s->uvs[0].y + bary.y*s->uvs[1].y + bary.z*s->uvs[2].y );
                                
	if( !s->isLit ) {
		return Bitmap_GetPixelUV( model->diffmap->bitmap, uv );
	}
	
	float ambientStr = 0.1f, specularStr = 1.0f;
	//vec3 fragPos = vec3_nrm( vec3_byMat4( bary, s->var_pos ) );
	//vec3 normal  = vec3_nrm( vec3_byMat4( bary , s->var_nrm ) );
	fragPos = vec3_nrm( vec3_create( bary.x*s->pos[0].x + bary.y*s->pos[1].x + bary.z*s->pos[2].x,
									 bary.x*s->pos[0].y + bary.y*s->pos[1].y + bary.z*s->pos[2].y,
									 bary.x*s->pos[0].z + bary.y*s->pos[1].z + bary.z*s->pos[2].z ) );
                                          
	normal  = vec3_nrm( vec3_create( bary.x*s->normals[0].x + bary.y*s->normals[1].x + bary.z*s->normals[2].x + s->normals[3].x,
									 bary.x*s->normals[0].y + bary.y*s->normals[1].y + bary.z*s->normals[2].y + s->normals[3].y,
									 bary.x*s->normals[0].z + bary.y*s->normals[1].z + bary.z*s->normals[2].z + s->normals[3].z) );
	
	if( model->normalmap != NULL ) {
		vec3 texN = vec3_sub( vec3_mlt( Color_ToVec3( Bitmap_GetPixelUV( model->normalmap->bitmap, uv ) ), 2.0f ), vec3_create( 1.0f, 1.0f, 1.0f ) ); // normal * 2 - 1
		if( s->isNormalInverted ) // if required to invert normal map
			normal = vec3_nrm( vec3_add( vec3_create( -texN.x, -texN.y, texN.z ), normal ) );
		else
			normal = vec3_nrm( vec3_add( texN, normal ) );
	}

	// ambient light
	ambient    = vec3_mlt( s->ambient_color, ambientStr );
	
	// diffuse light
	light_dir = vec3_nrm( vec3_sub( s->light_pos, fragPos ) );
	diff      = MAX( vec3_dot( normal, light_dir ), 0.0f );
	diffuse   = vec3_mlt( s->light_color, diff );
	
	// specular light
	view_dir  = vec3_nrm( vec3_sub( s->cam_pos, fragPos ) );
	refl_dir  = vec3_nrm( vec3_refl( vec3_neg( light_dir ), normal ) );
	spec      = powf( MAX( vec3_dot( view_dir, refl_dir ), 0.0f ), 32.0f );
	specular  = vec3_mlt( s->light_color, specularStr * spec );
	
	res       = vec3_add( vec3_add( vec3_mlt( diffuse, 0.5f ), ambient ), specular );
	
	return Color_IntensityVec3( Bitmap_GetPixelUV( model->diffmap->bitmap, uv ), res );
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x680, %rsp            # imm = 0x680
movlpd %xmm0, -0x20(%rbp)
movss %xmm1, -0x18(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x8(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x10(%rbp)
movq %rdi, -0x28(%rbp)
movq %rsi, -0x30(%rbp)
movq -0x28(%rbp), %rax
movss -0x10(%rbp), %xmm2
movss -0xc(%rbp), %xmm3
movss 0x1d4(%rax), %xmm1
movaps %xmm3, %xmm0
mulss %xmm1, %xmm0
movss 0x1cc(%rax), %xmm1
movss 0x1d0(%rax), %xmm4
movaps %xmm2, %xmm5
mulss %xmm1, %xmm5
addss %xmm0, %xmm5
movss -0x8(%rbp), %xmm1
movss 0x1dc(%rax), %xmm6
movaps %xmm1, %xmm0
mulss %xmm6, %xmm0
addss %xmm5, %xmm0
movss 0x1d8(%rax), %xmm5
mulss %xmm5, %xmm3
mulss %xmm4, %xmm2
addss %xmm3, %xmm2
movss 0x1e0(%rax), %xmm3
mulss %xmm3, %xmm1
addss %xmm2, %xmm1
callq 0x3b70
movlpd %xmm0, -0xd0(%rbp)
movq -0xd0(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x0, 0x1e8(%rax)
jne 0xcefa
movq -0x30(%rbp), %rax
movq 0x158(%rax), %rax
movq (%rax), %rdi
movsd -0xc0(%rbp), %xmm0
callq 0x3540
movl %eax, -0x4(%rbp)
jmp 0xddb3
movl $0x3dcccccd, -0xd4(%rbp) # imm = 0x3DCCCCCD
movl $0x3f800000, -0xd8(%rbp) # imm = 0x3F800000
movq -0x28(%rbp), %rax
movq %rax, -0x678(%rbp)
movss -0x10(%rbp), %xmm3
movss -0xc(%rbp), %xmm4
movss 0x110(%rax), %xmm1
movaps %xmm4, %xmm0
mulss %xmm1, %xmm0
movss 0x100(%rax), %xmm2
movss 0x104(%rax), %xmm6
movaps %xmm3, %xmm1
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss -0x8(%rbp), %xmm2
movss 0x120(%rax), %xmm5
movaps %xmm2, %xmm0
mulss %xmm5, %xmm0
addss %xmm1, %xmm0
movss 0x114(%rax), %xmm5
movaps %xmm4, %xmm1
mulss %xmm5, %xmm1
movaps %xmm3, %xmm5
mulss %xmm6, %xmm5
addss %xmm1, %xmm5
movss 0x124(%rax), %xmm6
movaps %xmm2, %xmm1
mulss %xmm6, %xmm1
addss %xmm5, %xmm1
movss 0x108(%rax), %xmm5
movss 0x118(%rax), %xmm6
mulss %xmm6, %xmm4
mulss %xmm5, %xmm3
addss %xmm4, %xmm3
movss 0x128(%rax), %xmm4
mulss %xmm4, %xmm2
addss %xmm3, %xmm2
callq 0x4270
movss %xmm1, -0x100(%rbp)
movlpd %xmm0, -0x108(%rbp)
movl -0x100(%rbp), %eax
movl %eax, -0xf0(%rbp)
movq -0x108(%rbp), %rax
movq %rax, -0xf8(%rbp)
movl -0xf0(%rbp), %eax
movl %eax, -0x110(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x118(%rbp)
movsd -0x118(%rbp), %xmm0
movss -0x110(%rbp), %xmm1
callq 0x46f0
movss %xmm1, -0x120(%rbp)
movlpd %xmm0, -0x128(%rbp)
movl -0x120(%rbp), %eax
movl %eax, -0xe0(%rbp)
movq -0x128(%rbp), %rax
movq %rax, -0xe8(%rbp)
movl -0xe0(%rbp), %eax
movl %eax, -0x38(%rbp)
movq -0xe8(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x670(%rbp)
movss -0x10(%rbp), %xmm3
movss -0xc(%rbp), %xmm4
movss 0x140(%rax), %xmm1
movaps %xmm4, %xmm0
mulss %xmm1, %xmm0
movss 0x130(%rax), %xmm2
movss 0x134(%rax), %xmm6
movaps %xmm3, %xmm1
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss -0x8(%rbp), %xmm2
movss 0x150(%rax), %xmm5
movaps %xmm2, %xmm0
mulss %xmm5, %xmm0
addss %xmm1, %xmm0
movss 0x160(%rax), %xmm1
addss %xmm1, %xmm0
movss 0x144(%rax), %xmm5
movaps %xmm4, %xmm1
mulss %xmm5, %xmm1
movaps %xmm3, %xmm5
mulss %xmm6, %xmm5
addss %xmm1, %xmm5
movss 0x154(%rax), %xmm6
movaps %xmm2, %xmm1
mulss %xmm6, %xmm1
addss %xmm5, %xmm1
movss 0x164(%rax), %xmm5
addss %xmm5, %xmm1
movss 0x138(%rax), %xmm5
movss 0x148(%rax), %xmm6
mulss %xmm6, %xmm4
mulss %xmm5, %xmm3
addss %xmm4, %xmm3
movss 0x158(%rax), %xmm4
mulss %xmm4, %xmm2
addss %xmm3, %xmm2
movss 0x168(%rax), %xmm3
addss %xmm3, %xmm2
callq 0x4270
movss %xmm1, -0x148(%rbp)
movlpd %xmm0, -0x150(%rbp)
movl -0x148(%rbp), %eax
movl %eax, -0x138(%rbp)
movq -0x150(%rbp), %rax
movq %rax, -0x140(%rbp)
movl -0x138(%rbp), %eax
movl %eax, -0x158(%rbp)
movq -0x140(%rbp), %rax
movq %rax, -0x160(%rbp)
movsd -0x160(%rbp), %xmm0
movss -0x158(%rbp), %xmm1
callq 0x46f0
movss %xmm1, -0x168(%rbp)
movlpd %xmm0, -0x170(%rbp)
movq -0x170(%rbp), %rax
movq %rax, -0x134(%rbp)
movl -0x168(%rbp), %eax
movl %eax, -0x12c(%rbp)
movq -0x134(%rbp), %rax
movq %rax, -0x4c(%rbp)
movl -0x12c(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x30(%rbp), %rax
cmpq $0x0, 0x160(%rax)
je 0xd595
movq -0x30(%rbp), %rax
movq 0x160(%rax), %rax
movq (%rax), %rdi
movsd -0xc0(%rbp), %xmm0
callq 0x3540
movl %eax, -0x19c(%rbp)
movl -0x19c(%rbp), %edi
callq 0x3050
movss %xmm1, -0x1a8(%rbp)
movlpd %xmm0, -0x1b0(%rbp)
movl -0x1a8(%rbp), %eax
movl %eax, -0x190(%rbp)
movq -0x1b0(%rbp), %rax
movq %rax, -0x198(%rbp)
movl -0x190(%rbp), %eax
movl %eax, -0x1b8(%rbp)
movq -0x198(%rbp), %rax
movq %rax, -0x1c0(%rbp)
movsd -0x1c0(%rbp), %xmm0
movss -0x1b8(%rbp), %xmm1
movss 0xdb8(%rip), %xmm2      # 0xe01c
callq 0x4440
movss %xmm1, -0x1c8(%rbp)
movlpd %xmm0, -0x1d0(%rbp)
movl -0x1c8(%rbp), %eax
movl %eax, -0x180(%rbp)
movq -0x1d0(%rbp), %rax
movq %rax, -0x188(%rbp)
movss 0xd69(%rip), %xmm2      # 0xe004
movaps %xmm2, %xmm0
movaps %xmm2, %xmm1
callq 0x4270
movss %xmm1, -0x1e8(%rbp)
movlpd %xmm0, -0x1f0(%rbp)
movl -0x1e8(%rbp), %eax
movl %eax, -0x1d8(%rbp)
movq -0x1f0(%rbp), %rax
movq %rax, -0x1e0(%rbp)
movl -0x180(%rbp), %eax
movl %eax, -0x1f8(%rbp)
movq -0x188(%rbp), %rax
movq %rax, -0x200(%rbp)
movsd -0x200(%rbp), %xmm0
movss -0x1f8(%rbp), %xmm1
movl -0x1d8(%rbp), %eax
movl %eax, -0x208(%rbp)
movq -0x1e0(%rbp), %rax
movq %rax, -0x210(%rbp)
movsd -0x210(%rbp), %xmm2
movss -0x208(%rbp), %xmm3
callq 0x43b0
movss %xmm1, -0x218(%rbp)
movlpd %xmm0, -0x220(%rbp)
movq -0x220(%rbp), %rax
movq %rax, -0x17c(%rbp)
movl -0x218(%rbp), %eax
movl %eax, -0x174(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x0, 0x1ec(%rax)
je 0xd4a9
movaps 0xdf5(%rip), %xmm2      # 0xe160
movss -0x17c(%rbp), %xmm0
movss -0x178(%rbp), %xmm1
pxor %xmm2, %xmm0
pxor %xmm2, %xmm1
movss -0x174(%rbp), %xmm2
callq 0x4270
movss %xmm1, -0x250(%rbp)
movlpd %xmm0, -0x258(%rbp)
movl -0x250(%rbp), %eax
movl %eax, -0x240(%rbp)
movq -0x258(%rbp), %rax
movq %rax, -0x248(%rbp)
movl -0x240(%rbp), %eax
movl %eax, -0x260(%rbp)
movq -0x248(%rbp), %rax
movq %rax, -0x268(%rbp)
movsd -0x268(%rbp), %xmm0
movss -0x260(%rbp), %xmm1
movl -0x44(%rbp), %eax
movl %eax, -0x270(%rbp)
movq -0x4c(%rbp), %rax
movq %rax, -0x278(%rbp)
movsd -0x278(%rbp), %xmm2
movss -0x270(%rbp), %xmm3
callq 0x4320
movss %xmm1, -0x280(%rbp)
movlpd %xmm0, -0x288(%rbp)
movl -0x280(%rbp), %eax
movl %eax, -0x230(%rbp)
movq -0x288(%rbp), %rax
movq %rax, -0x238(%rbp)
movl -0x230(%rbp), %eax
movl %eax, -0x290(%rbp)
movq -0x238(%rbp), %rax
movq %rax, -0x298(%rbp)
movsd -0x298(%rbp), %xmm0
movss -0x290(%rbp), %xmm1
callq 0x46f0
movss %xmm1, -0x2a0(%rbp)
movlpd %xmm0, -0x2a8(%rbp)
movq -0x2a8(%rbp), %rax
movq %rax, -0x22c(%rbp)
movl -0x2a0(%rbp), %eax
movl %eax, -0x224(%rbp)
movq -0x22c(%rbp), %rax
movq %rax, -0x4c(%rbp)
movl -0x224(%rbp), %eax
movl %eax, -0x44(%rbp)
jmp 0xd593
movl -0x174(%rbp), %eax
movl %eax, -0x2c8(%rbp)
movq -0x17c(%rbp), %rax
movq %rax, -0x2d0(%rbp)
movsd -0x2d0(%rbp), %xmm0
movss -0x2c8(%rbp), %xmm1
movl -0x44(%rbp), %eax
movl %eax, -0x2d8(%rbp)
movq -0x4c(%rbp), %rax
movq %rax, -0x2e0(%rbp)
movsd -0x2e0(%rbp), %xmm2
movss -0x2d8(%rbp), %xmm3
callq 0x4320
movss %xmm1, -0x2e8(%rbp)
movlpd %xmm0, -0x2f0(%rbp)
movl -0x2e8(%rbp), %eax
movl %eax, -0x2b8(%rbp)
movq -0x2f0(%rbp), %rax
movq %rax, -0x2c0(%rbp)
movl -0x2b8(%rbp), %eax
movl %eax, -0x2f8(%rbp)
movq -0x2c0(%rbp), %rax
movq %rax, -0x300(%rbp)
movsd -0x300(%rbp), %xmm0
movss -0x2f8(%rbp), %xmm1
callq 0x46f0
movss %xmm1, -0x308(%rbp)
movlpd %xmm0, -0x310(%rbp)
movq -0x310(%rbp), %rax
movq %rax, -0x2b4(%rbp)
movl -0x308(%rbp), %eax
movl %eax, -0x2ac(%rbp)
movq -0x2b4(%rbp), %rax
movq %rax, -0x4c(%rbp)
movl -0x2ac(%rbp), %eax
movl %eax, -0x44(%rbp)
jmp 0xd595
movq -0x28(%rbp), %rax
movss -0xd4(%rbp), %xmm2
movl 0x1a4(%rax), %ecx
movl %ecx, -0x328(%rbp)
movq 0x19c(%rax), %rax
movq %rax, -0x330(%rbp)
movsd -0x330(%rbp), %xmm0
movss -0x328(%rbp), %xmm1
callq 0x4440
movss %xmm1, -0x338(%rbp)
movlpd %xmm0, -0x340(%rbp)
movl -0x338(%rbp), %eax
movl %eax, -0x318(%rbp)
movq -0x340(%rbp), %rax
movq %rax, -0x320(%rbp)
movl -0x318(%rbp), %eax
movl %eax, -0x50(%rbp)
movq -0x320(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x28(%rbp), %rax
movl 0x18c(%rax), %ecx
movl %ecx, -0x368(%rbp)
movq 0x184(%rax), %rax
movq %rax, -0x370(%rbp)
movsd -0x370(%rbp), %xmm0
movss -0x368(%rbp), %xmm1
movl -0x38(%rbp), %eax
movl %eax, -0x378(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x380(%rbp)
movsd -0x380(%rbp), %xmm2
movss -0x378(%rbp), %xmm3
callq 0x43b0
movss %xmm1, -0x388(%rbp)
movlpd %xmm0, -0x390(%rbp)
movl -0x388(%rbp), %eax
movl %eax, -0x358(%rbp)
movq -0x390(%rbp), %rax
movq %rax, -0x360(%rbp)
movl -0x358(%rbp), %eax
movl %eax, -0x398(%rbp)
movq -0x360(%rbp), %rax
movq %rax, -0x3a0(%rbp)
movsd -0x3a0(%rbp), %xmm0
movss -0x398(%rbp), %xmm1
callq 0x46f0
movss %xmm1, -0x3a8(%rbp)
movlpd %xmm0, -0x3b0(%rbp)
movl -0x3a8(%rbp), %eax
movl %eax, -0x348(%rbp)
movq -0x3b0(%rbp), %rax
movq %rax, -0x350(%rbp)
movl -0x348(%rbp), %eax
movl %eax, -0x70(%rbp)
movq -0x350(%rbp), %rax
movq %rax, -0x78(%rbp)
movl -0x44(%rbp), %eax
movl %eax, -0x3b8(%rbp)
movq -0x4c(%rbp), %rax
movq %rax, -0x3c0(%rbp)
movsd -0x3c0(%rbp), %xmm0
movss -0x3b8(%rbp), %xmm1
movl -0x70(%rbp), %eax
movl %eax, -0x3c8(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0x3d0(%rbp)
movsd -0x3d0(%rbp), %xmm2
movss -0x3c8(%rbp), %xmm3
callq 0x4550
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0xd7a8
movl -0x44(%rbp), %eax
movl %eax, -0x3d8(%rbp)
movq -0x4c(%rbp), %rax
movq %rax, -0x3e0(%rbp)
movsd -0x3e0(%rbp), %xmm0
movss -0x3d8(%rbp), %xmm1
movl -0x70(%rbp), %eax
movl %eax, -0x3e8(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0x3f0(%rbp)
movsd -0x3f0(%rbp), %xmm2
movss -0x3e8(%rbp), %xmm3
callq 0x4550
movss %xmm0, -0x67c(%rbp)
jmp 0xd7b5
xorps %xmm0, %xmm0
movss %xmm0, -0x67c(%rbp)
jmp 0xd7b5
movss -0x67c(%rbp), %xmm0
movss %xmm0, -0xc4(%rbp)
movq -0x28(%rbp), %rax
movss -0xc4(%rbp), %xmm2
movl 0x198(%rax), %ecx
movl %ecx, -0x408(%rbp)
movq 0x190(%rax), %rax
movq %rax, -0x410(%rbp)
movsd -0x410(%rbp), %xmm0
movss -0x408(%rbp), %xmm1
callq 0x4440
movss %xmm1, -0x418(%rbp)
movlpd %xmm0, -0x420(%rbp)
movl -0x418(%rbp), %eax
movl %eax, -0x3f8(%rbp)
movq -0x420(%rbp), %rax
movq %rax, -0x400(%rbp)
movl -0x3f8(%rbp), %eax
movl %eax, -0x60(%rbp)
movq -0x400(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x28(%rbp), %rax
movl 0x180(%rax), %ecx
movl %ecx, -0x448(%rbp)
movq 0x178(%rax), %rax
movq %rax, -0x450(%rbp)
movsd -0x450(%rbp), %xmm0
movss -0x448(%rbp), %xmm1
movl -0x38(%rbp), %eax
movl %eax, -0x458(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x460(%rbp)
movsd -0x460(%rbp), %xmm2
movss -0x458(%rbp), %xmm3
callq 0x43b0
movss %xmm1, -0x468(%rbp)
movlpd %xmm0, -0x470(%rbp)
movl -0x468(%rbp), %eax
movl %eax, -0x438(%rbp)
movq -0x470(%rbp), %rax
movq %rax, -0x440(%rbp)
movl -0x438(%rbp), %eax
movl %eax, -0x478(%rbp)
movq -0x440(%rbp), %rax
movq %rax, -0x480(%rbp)
movsd -0x480(%rbp), %xmm0
movss -0x478(%rbp), %xmm1
callq 0x46f0
movss %xmm1, -0x488(%rbp)
movlpd %xmm0, -0x490(%rbp)
movl -0x488(%rbp), %eax
movl %eax, -0x428(%rbp)
movq -0x490(%rbp), %rax
movq %rax, -0x430(%rbp)
movl -0x428(%rbp), %eax
movl %eax, -0x80(%rbp)
movq -0x430(%rbp), %rax
movq %rax, -0x88(%rbp)
movl -0x70(%rbp), %eax
movl %eax, -0x4c8(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0x4d0(%rbp)
movsd -0x4d0(%rbp), %xmm0
movss -0x4c8(%rbp), %xmm1
callq 0x4680
movss %xmm1, -0x4d8(%rbp)
movlpd %xmm0, -0x4e0(%rbp)
movl -0x4d8(%rbp), %eax
movl %eax, -0x4b8(%rbp)
movq -0x4e0(%rbp), %rax
movq %rax, -0x4c0(%rbp)
movl -0x4b8(%rbp), %eax
movl %eax, -0x4e8(%rbp)
movq -0x4c0(%rbp), %rax
movq %rax, -0x4f0(%rbp)
movsd -0x4f0(%rbp), %xmm0
movss -0x4e8(%rbp), %xmm1
movl -0x44(%rbp), %eax
movl %eax, -0x4f8(%rbp)
movq -0x4c(%rbp), %rax
movq %rax, -0x500(%rbp)
movsd -0x500(%rbp), %xmm2
movss -0x4f8(%rbp), %xmm3
callq 0x49a0
movss %xmm1, -0x508(%rbp)
movlpd %xmm0, -0x510(%rbp)
movl -0x508(%rbp), %eax
movl %eax, -0x4a8(%rbp)
movq -0x510(%rbp), %rax
movq %rax, -0x4b0(%rbp)
movl -0x4a8(%rbp), %eax
movl %eax, -0x518(%rbp)
movq -0x4b0(%rbp), %rax
movq %rax, -0x520(%rbp)
movsd -0x520(%rbp), %xmm0
movss -0x518(%rbp), %xmm1
callq 0x46f0
movss %xmm1, -0x528(%rbp)
movlpd %xmm0, -0x530(%rbp)
movl -0x528(%rbp), %eax
movl %eax, -0x498(%rbp)
movq -0x530(%rbp), %rax
movq %rax, -0x4a0(%rbp)
movl -0x498(%rbp), %eax
movl %eax, -0x90(%rbp)
movq -0x4a0(%rbp), %rax
movq %rax, -0x98(%rbp)
movl -0x80(%rbp), %eax
movl %eax, -0x538(%rbp)
movq -0x88(%rbp), %rax
movq %rax, -0x540(%rbp)
movsd -0x540(%rbp), %xmm0
movss -0x538(%rbp), %xmm1
movl -0x90(%rbp), %eax
movl %eax, -0x548(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x550(%rbp)
movsd -0x550(%rbp), %xmm2
movss -0x548(%rbp), %xmm3
callq 0x4550
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0xdb30
movl -0x80(%rbp), %eax
movl %eax, -0x558(%rbp)
movq -0x88(%rbp), %rax
movq %rax, -0x560(%rbp)
movsd -0x560(%rbp), %xmm0
movss -0x558(%rbp), %xmm1
movl -0x90(%rbp), %eax
movl %eax, -0x568(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x570(%rbp)
movsd -0x570(%rbp), %xmm2
movss -0x568(%rbp), %xmm3
callq 0x4550
movss %xmm0, -0x680(%rbp)
jmp 0xdb3d
xorps %xmm0, %xmm0
movss %xmm0, -0x680(%rbp)
jmp 0xdb3d
movss -0x680(%rbp), %xmm0
movss 0x10ff(%rip), %xmm1     # 0xec4c
callq 0x1200
movss %xmm0, -0xc8(%rbp)
movq -0x28(%rbp), %rax
movss -0xd8(%rbp), %xmm2
movss -0xc8(%rbp), %xmm0
mulss %xmm0, %xmm2
movl 0x198(%rax), %ecx
movl %ecx, -0x588(%rbp)
movq 0x190(%rax), %rax
movq %rax, -0x590(%rbp)
movsd -0x590(%rbp), %xmm0
movss -0x588(%rbp), %xmm1
callq 0x4440
movss %xmm1, -0x598(%rbp)
movlpd %xmm0, -0x5a0(%rbp)
movl -0x598(%rbp), %eax
movl %eax, -0x578(%rbp)
movq -0x5a0(%rbp), %rax
movq %rax, -0x580(%rbp)
movl -0x578(%rbp), %eax
movl %eax, -0xa0(%rbp)
movq -0x580(%rbp), %rax
movq %rax, -0xa8(%rbp)
movl -0x60(%rbp), %eax
movl %eax, -0x5d8(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x5e0(%rbp)
movsd -0x5e0(%rbp), %xmm0
movss -0x5d8(%rbp), %xmm1
movss 0x423(%rip), %xmm2      # 0xe034
callq 0x4440
movss %xmm1, -0x5e8(%rbp)
movlpd %xmm0, -0x5f0(%rbp)
movl -0x5e8(%rbp), %eax
movl %eax, -0x5c8(%rbp)
movq -0x5f0(%rbp), %rax
movq %rax, -0x5d0(%rbp)
movl -0x5c8(%rbp), %eax
movl %eax, -0x5f8(%rbp)
movq -0x5d0(%rbp), %rax
movq %rax, -0x600(%rbp)
movsd -0x600(%rbp), %xmm0
movss -0x5f8(%rbp), %xmm1
movl -0x50(%rbp), %eax
movl %eax, -0x608(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x610(%rbp)
movsd -0x610(%rbp), %xmm2
movss -0x608(%rbp), %xmm3
callq 0x4320
movss %xmm1, -0x618(%rbp)
movlpd %xmm0, -0x620(%rbp)
movl -0x618(%rbp), %eax
movl %eax, -0x5b8(%rbp)
movq -0x620(%rbp), %rax
movq %rax, -0x5c0(%rbp)
movl -0x5b8(%rbp), %eax
movl %eax, -0x628(%rbp)
movq -0x5c0(%rbp), %rax
movq %rax, -0x630(%rbp)
movsd -0x630(%rbp), %xmm0
movss -0x628(%rbp), %xmm1
movl -0xa0(%rbp), %eax
movl %eax, -0x638(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x640(%rbp)
movsd -0x640(%rbp), %xmm2
movss -0x638(%rbp), %xmm3
callq 0x4320
movss %xmm1, -0x648(%rbp)
movlpd %xmm0, -0x650(%rbp)
movl -0x648(%rbp), %eax
movl %eax, -0x5a8(%rbp)
movq -0x650(%rbp), %rax
movq %rax, -0x5b0(%rbp)
movl -0x5a8(%rbp), %eax
movl %eax, -0xb0(%rbp)
movq -0x5b0(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x30(%rbp), %rax
movq 0x158(%rax), %rax
movq (%rax), %rdi
movsd -0xc0(%rbp), %xmm0
callq 0x3540
movl %eax, -0x654(%rbp)
movl -0x654(%rbp), %edi
movl -0xb0(%rbp), %eax
movl %eax, -0x660(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x668(%rbp)
movsd -0x668(%rbp), %xmm0
movss -0x660(%rbp), %xmm1
callq 0x2f30
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x680, %rsp            # imm = 0x680
popq %rbp
retq
nop