// File: /workspace/github_c_makefile_star2_O0/olcaytaner[P]Isell/regressionrule.c
// Function: optimize_regression_ruleset
void optimize_regression_ruleset(Regressionruleset* r, Instanceptr* traindata, Instanceptr* cvdata, Regrule_parameterptr param)
{
	/*!Last Changed 03.04.2005*/
	/*!Last Changed 05.03.2005*/
	Regressionruleptr rule, before = NULL, replacementrule, revisionrule, next, newrule;
	Instanceptr removedtrain = NULL, removedcv = NULL, newsample, grow, prune;
	matrix w;
	int exitnow;
	double error, revisionerror, replacementerror, regvalue;
	rule = r->start;
	while (rule && can_be_divided_rule(*traindata, param->sigma, &w, &regvalue, r->leaftype))
	 {
			if (*cvdata)
				{
		   error = generalization_error_of_regression_ruleset(*r, *cvdata, param->modelselectionmethod);
     divide_instancelist(traindata, &prune, &grow, 3);
     replacementrule = grow_regression_rule(&grow, param);
  			if (replacementrule->conditioncount > 0)
						 prune_regression_rule(replacementrule, prune, param->modelselectionmethod);
				}
			else
			 {
		   error = generalization_error_of_regression_ruleset(*r, *traindata, param->modelselectionmethod);
				 newsample = bootstrap_sample_without_stratification(*traindata);
					replacementrule = grow_regression_rule(&newsample, param);
  			if (replacementrule->conditioncount > 0)
						 prune_regression_rule(replacementrule, *traindata, param->modelselectionmethod);
			 }
			remove_regression_rule_after(r, before, rule);
			add_regression_rule_after(r, before, replacementrule);
			if (*cvdata)
			 {
  		 replacementerror = generalization_error_of_regression_ruleset(*r, *cvdata, param->modelselectionmethod);
				 revisionrule = grow_regression_revision_rule(&grow, rule, param);
					if (revisionrule->conditioncount > 0)
						 prune_regression_rule(revisionrule, prune, param->modelselectionmethod);
			 }
			else
			 {
				 replacementerror = generalization_error_of_regression_ruleset(*r, *traindata, param->modelselectionmethod);
  			deallocate(newsample);
				 revisionrule = grow_regression_revision_rule(traindata, rule, param);
					if (revisionrule->conditioncount > 0)
       prune_regression_rule(revisionrule, *traindata, param->modelselectionmethod);
			 }
			remove_regression_rule_after(r, before, replacementrule);
			add_regression_rule_after(r, before, revisionrule);
			if (*cvdata)
			 {
  		 revisionerror = generalization_error_of_regression_ruleset(*r, *cvdata, param->modelselectionmethod);
  			*traindata = restore_instancelist(*traindata, grow);
  			merge_instancelist(traindata, prune);
			 }
			else
				 revisionerror = generalization_error_of_regression_ruleset(*r, *traindata, param->modelselectionmethod);
   if ((revisionerror < error) || (replacementerror < error))
				 if (replacementerror <= revisionerror)
					 {
						 remove_regression_rule_after(r, before, revisionrule);
							add_regression_rule_after(r, before, replacementrule);
							free_regression_rule(*revisionrule);
							safe_free(revisionrule);
							free_regression_rule(*rule);
							safe_free(rule);
  				 remove_regression_covered(traindata, &removedtrain, replacementrule);
    			if (*cvdata)
    				 remove_regression_covered(cvdata, &removedcv, replacementrule);
							rule = replacementrule;
					 }
					else
					 {
							free_regression_rule(*replacementrule);
							safe_free(replacementrule);
							free_regression_rule(*rule);
							safe_free(rule);						 
  				 remove_regression_covered(traindata, &removedtrain, revisionrule);
    			if (*cvdata)
    				 remove_regression_covered(cvdata, &removedcv, revisionrule);
							rule = revisionrule;
					 }
			else
			 {
					remove_regression_rule_after(r, before, revisionrule);
					add_regression_rule_after(r, before, rule);
					free_regression_rule(*revisionrule);
					safe_free(revisionrule);
					free_regression_rule(*replacementrule);
					safe_free(replacementrule);
  			remove_regression_covered(traindata, &removedtrain, rule);
  			if (*cvdata)
    		 remove_regression_covered(cvdata, &removedcv, rule);
			 }
			before = rule;
			rule = rule->next;
	 }
	if (!rule)
	 {
  	while (can_be_divided_rule(*traindata, param->sigma, &w, &regvalue, r->leaftype))
			 {
	  	 exitnow = 0;
  			if (*cvdata)
					 {
       divide_instancelist(traindata, &prune, &grow, 3);
       newrule = grow_regression_rule(&grow, param);
					 }
			  else
				  	newrule = grow_regression_rule(traindata, param);
  	  if (newrule && newrule->start)
					 {
    			if (*cvdata)
				  		 prune_regression_rule(newrule, prune, param->modelselectionmethod);
				  	else
					  	 prune_regression_rule(newrule, *traindata, param->modelselectionmethod);
					  if (newrule->start)
							 {
				  		 add_regression_rule(r, newrule);
      			if (*cvdata)
									 {
  			  	   *traindata = restore_instancelist(*traindata, grow);
  				  	  merge_instancelist(traindata, prune);
									 }
							 }
				  	else
					  	 exitnow = 1;
					 }
			  else
				   exitnow = 1;
			  if (!exitnow)
					 {
			  	 remove_regression_covered(traindata, &removedtrain, newrule);
  	  	 if (r->leaftype == LINEARLEAF)
      		 matrix_free(w);				 
					 }
			  else
					 {
    			if (*cvdata)
								{
  			  	 *traindata = restore_instancelist(*traindata, grow);
  				  	merge_instancelist(traindata, prune);
								}
				   break;
					 }
			 }
	  if (r->leaftype == CONSTANTLEAF)
	  	 r->regressionvalue = regvalue;
	  else
    	r->w = w;
	 }
	else
	 {
  	while (rule)
			 {
	  	 next = rule->next;
					if (before)
		  		 before->next = next;
					else
							r->start = next;
     free_regression_rule(*rule);
		  	safe_free(rule);
     r->rulecount--;
     if (next == NULL)
			  		r->end = before;
			  rule = next;
			 }
	  if (before)
	    before->next = NULL;
	 }
	merge_instancelist(traindata, removedtrain);
	if (*cvdata)
		 merge_instancelist(cvdata, removedcv);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq $0x0, -0x30(%rbp)
movq $0x0, -0x58(%rbp)
movq $0x0, -0x60(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x28(%rbp)
movb %al, -0xb1(%rbp)
je 0xa3643
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x20(%rbp), %rax
movsd 0x10(%rax), %xmm0
movq -0x8(%rbp), %rax
movl 0x20(%rax), %ecx
leaq -0x88(%rbp), %rsi
leaq -0xb0(%rbp), %rdx
callq 0xa3ee0
cmpl $0x0, %eax
setne %al
movb %al, -0xb1(%rbp)
movb -0xb1(%rbp), %al
testb $0x1, %al
jne 0xa3652
jmp 0xa3c11
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa36ea
movq -0x8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq (%rax), %rdi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
movq 0x30(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x30(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa2f40
movsd %xmm0, -0x98(%rbp)
movq -0x10(%rbp), %rdi
leaq -0x78(%rbp), %rsi
leaq -0x70(%rbp), %rdx
movl $0x3, %ecx
callq 0x45f60
movq -0x20(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0xa4000
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpl $0x0, 0x30(%rax)
jle 0xa36e5
movq -0x38(%rbp), %rdi
movq -0x78(%rbp), %rsi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %edx
callq 0xa4140
jmp 0xa376e
movq -0x8(%rbp), %rcx
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
movq 0x30(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x30(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa2f40
movsd %xmm0, -0x98(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x45270
movq %rax, -0x68(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x68(%rbp), %rdi
callq 0xa4000
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpl $0x0, 0x30(%rax)
jle 0xa376c
movq -0x38(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %edx
callq 0xa4140
jmp 0xa376e
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0xa3040
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x38(%rbp), %rdx
callq 0xa30d0
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa3812
movq -0x8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq (%rax), %rdi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
movq 0x30(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x30(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa2f40
movsd %xmm0, -0xa8(%rbp)
movq -0x28(%rbp), %rsi
movq -0x20(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0xa4250
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpl $0x0, 0x30(%rax)
jle 0xa380d
movq -0x40(%rbp), %rdi
movq -0x78(%rbp), %rsi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %edx
callq 0xa4140
jmp 0xa3893
movq -0x8(%rbp), %rcx
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
movq 0x30(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x30(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa2f40
movsd %xmm0, -0xa8(%rbp)
movq -0x68(%rbp), %rdi
callq 0x44510
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0xa4250
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpl $0x0, 0x30(%rax)
jle 0xa3891
movq -0x40(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %edx
callq 0xa4140
jmp 0xa3893
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x38(%rbp), %rdx
callq 0xa3040
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x40(%rbp), %rdx
callq 0xa30d0
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa3928
movq -0x8(%rbp), %rcx
movq -0x18(%rbp), %rax
movq (%rax), %rdi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
movq 0x30(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x30(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa2f40
movsd %xmm0, -0xa0(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x70(%rbp), %rsi
callq 0x464e0
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x44f40
jmp 0xa3968
movq -0x8(%rbp), %rcx
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
movq 0x30(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x30(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa2f40
movsd %xmm0, -0xa0(%rbp)
movsd -0xa0(%rbp), %xmm1
movsd -0x98(%rbp), %xmm0
ucomisd %xmm1, %xmm0
ja 0xa3998
movsd -0xa8(%rbp), %xmm1
movsd -0x98(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xa3b32
movsd -0xa8(%rbp), %xmm1
movsd -0xa0(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jb 0xa3a83
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x40(%rbp), %rdx
callq 0xa3040
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x38(%rbp), %rdx
callq 0xa30d0
movq -0x40(%rbp), %rcx
movq 0x40(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x40(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups 0x30(%rcx), %xmm3
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa3150
movq -0x40(%rbp), %rdi
callq 0x52e80
movq -0x28(%rbp), %rcx
movq 0x40(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x40(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups 0x30(%rcx), %xmm3
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa3150
movq -0x28(%rbp), %rdi
callq 0x52e80
movq -0x10(%rbp), %rdi
movq -0x38(%rbp), %rdx
leaq -0x58(%rbp), %rsi
callq 0xa43a0
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa3a76
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rdx
leaq -0x60(%rbp), %rsi
callq 0xa43a0
movq -0x38(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0xa3b2d
movq -0x38(%rbp), %rcx
movq 0x40(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x40(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups 0x30(%rcx), %xmm3
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa3150
movq -0x38(%rbp), %rdi
callq 0x52e80
movq -0x28(%rbp), %rcx
movq 0x40(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x40(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups 0x30(%rcx), %xmm3
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa3150
movq -0x28(%rbp), %rdi
callq 0x52e80
movq -0x10(%rbp), %rdi
movq -0x40(%rbp), %rdx
leaq -0x58(%rbp), %rsi
callq 0xa43a0
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa3b25
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rdx
leaq -0x60(%rbp), %rsi
callq 0xa43a0
movq -0x40(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0xa3bf8
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x40(%rbp), %rdx
callq 0xa3040
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0xa30d0
movq -0x40(%rbp), %rcx
movq 0x40(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x40(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups 0x30(%rcx), %xmm3
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa3150
movq -0x40(%rbp), %rdi
callq 0x52e80
movq -0x38(%rbp), %rcx
movq 0x40(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x40(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups 0x30(%rcx), %xmm3
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa3150
movq -0x38(%rbp), %rdi
callq 0x52e80
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rdx
leaq -0x58(%rbp), %rsi
callq 0xa43a0
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa3bf6
movq -0x18(%rbp), %rdi
movq -0x28(%rbp), %rdx
leaq -0x60(%rbp), %rsi
callq 0xa43a0
jmp 0xa3bf8
movq -0x28(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x28(%rbp)
jmp 0xa35fe
cmpq $0x0, -0x28(%rbp)
jne 0xa3df8
jmp 0xa3c1e
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x20(%rbp), %rax
movsd 0x10(%rax), %xmm0
movq -0x8(%rbp), %rax
movl 0x20(%rax), %ecx
leaq -0x88(%rbp), %rsi
leaq -0xb0(%rbp), %rdx
callq 0xa3ee0
cmpl $0x0, %eax
je 0xa3dbf
movl $0x0, -0x8c(%rbp)
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa3c8e
movq -0x10(%rbp), %rdi
leaq -0x78(%rbp), %rsi
leaq -0x70(%rbp), %rdx
movl $0x3, %ecx
callq 0x45f60
movq -0x20(%rbp), %rsi
leaq -0x70(%rbp), %rdi
callq 0xa4000
movq %rax, -0x50(%rbp)
jmp 0xa3c9f
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0xa4000
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
je 0xa3d47
movq -0x50(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0xa3d47
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa3cd9
movq -0x50(%rbp), %rdi
movq -0x78(%rbp), %rsi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %edx
callq 0xa4140
jmp 0xa3cf0
movq -0x50(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
movq -0x20(%rbp), %rax
movl 0x4(%rax), %edx
callq 0xa4140
movq -0x50(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0xa3d3b
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0xa44c0
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa3d39
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x70(%rbp), %rsi
callq 0x464e0
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x44f40
jmp 0xa3d45
movl $0x1, -0x8c(%rbp)
jmp 0xa3d51
movl $0x1, -0x8c(%rbp)
cmpl $0x0, -0x8c(%rbp)
jne 0xa3d87
movq -0x10(%rbp), %rdi
movq -0x50(%rbp), %rdx
leaq -0x58(%rbp), %rsi
callq 0xa43a0
movq -0x8(%rbp), %rax
cmpl $0x1, 0x20(%rax)
jne 0xa3d85
movq -0x88(%rbp), %rdi
movq -0x80(%rbp), %rsi
callq 0x59ea0
jmp 0xa3dba
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa3db8
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x70(%rbp), %rsi
callq 0x464e0
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x44f40
jmp 0xa3dbf
jmp 0xa3c1e
movq -0x8(%rbp), %rax
cmpl $0x0, 0x20(%rax)
jne 0xa3ddc
movsd -0xb0(%rbp), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x28(%rax)
jmp 0xa3df3
movq -0x8(%rbp), %rax
movq -0x88(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x80(%rbp), %rcx
movq %rcx, 0x18(%rax)
jmp 0xa3eae
jmp 0xa3dfa
cmpq $0x0, -0x28(%rbp)
je 0xa3e99
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0xa3e26
movq -0x48(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x38(%rax)
jmp 0xa3e31
movq -0x48(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rcx
movq 0x40(%rcx), %rdx
movq %rsp, %rax
movq %rdx, 0x40(%rax)
movups (%rcx), %xmm0
movups 0x10(%rcx), %xmm1
movups 0x20(%rcx), %xmm2
movups 0x30(%rcx), %xmm3
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xa3150
movq -0x28(%rbp), %rdi
callq 0x52e80
movq -0x8(%rbp), %rax
movl 0x30(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x30(%rax)
cmpq $0x0, -0x48(%rbp)
jne 0xa3e8c
movq -0x30(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x48(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0xa3dfa
cmpq $0x0, -0x30(%rbp)
je 0xa3eac
movq -0x30(%rbp), %rax
movq $0x0, 0x38(%rax)
jmp 0xa3eae
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x44f40
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa3ed2
movq -0x18(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0x44f40
addq $0x100, %rsp            # imm = 0x100
popq %rbp
retq
nopl (%rax,%rax)