// File: /workspace/github_c_makefile_star2_O0/zpole[P]IICV/vl/covdet.c
// Function: vl_covdet_detect
void
vl_covdet_detect (VlCovDet * self)
{
  VlScaleSpaceGeometry geom = vl_scalespace_get_geometry(self->gss) ;
  VlScaleSpaceGeometry cgeom ;
  float * levelxx = NULL ;
  float * levelyy = NULL ;
  float * levelxy = NULL ;
  vl_index o, s ;

  assert (self) ;
  assert (self->gss) ;

  /* clear previous detections if any */
  self->numFeatures = 0 ;

  /* prepare buffers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  cgeom = geom ;
  if (self->method == VL_COVDET_METHOD_DOG) {
    cgeom.octaveLastSubdivision -= 1 ;
  }
  if (!self->css ||
      !vl_scalespacegeometry_is_equal(cgeom,
                                      vl_scalespace_get_geometry(self->css)))
  {
    if (self->css) vl_scalespace_delete(self->css) ;
    self->css = vl_scalespace_new_with_geometry(cgeom) ;
  }
  if (self->method == VL_COVDET_METHOD_HARRIS_LAPLACE ||
      self->method == VL_COVDET_METHOD_MULTISCALE_HARRIS) {
    VlScaleSpaceOctaveGeometry oct = vl_scalespace_get_octave_geometry(self->gss, geom.firstOctave) ;
    levelxx = vl_malloc(oct.width * oct.height * sizeof(float)) ;
    levelyy = vl_malloc(oct.width * oct.height * sizeof(float)) ;
    levelxy = vl_malloc(oct.width * oct.height * sizeof(float)) ;
  }

  /* compute cornerness ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  for (o = cgeom.firstOctave ; o <= cgeom.lastOctave ; ++o) {
    VlScaleSpaceOctaveGeometry oct = vl_scalespace_get_octave_geometry(self->css, o) ;

    for (s = cgeom.octaveFirstSubdivision ; s <= cgeom.octaveLastSubdivision ; ++s) {
      float * level = vl_scalespace_get_level(self->gss, o, s) ;
      float * clevel = vl_scalespace_get_level(self->css, o, s) ;
      double sigma = vl_scalespace_get_level_sigma(self->css, o, s) ;
      switch (self->method) {
        case VL_COVDET_METHOD_DOG:
          _vl_dog_response(clevel,
                           vl_scalespace_get_level(self->gss, o, s + 1),
                           level,
                           oct.width, oct.height) ;
          break ;

        case VL_COVDET_METHOD_HARRIS_LAPLACE:
        case VL_COVDET_METHOD_MULTISCALE_HARRIS:
          _vl_harris_response(clevel,
                              level, oct.width, oct.height, oct.step,
                              sigma, 1.4 * sigma, 0.05) ;
          break ;

        case VL_COVDET_METHOD_HESSIAN:
        case VL_COVDET_METHOD_HESSIAN_LAPLACE:
        case VL_COVDET_METHOD_MULTISCALE_HESSIAN:
          _vl_det_hessian_response(clevel, level, oct.width, oct.height, oct.step, sigma) ;
          break ;

        default:
          assert(0) ;
      }
    }
  }

  /* find and refine local maxima ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
  {
    vl_index * extrema = NULL ;
    vl_size extremaBufferSize = 0 ;
    vl_size numExtrema ;
    vl_size index ;
    for (o = cgeom.firstOctave ; o <= cgeom.lastOctave ; ++o) {
      VlScaleSpaceOctaveGeometry octgeom = vl_scalespace_get_octave_geometry(self->css, o) ;
      double step = octgeom.step ;
      vl_size width = octgeom.width ;
      vl_size height = octgeom.height ;
      vl_size depth = cgeom.octaveLastSubdivision - cgeom.octaveFirstSubdivision + 1 ;

      switch (self->method) {
        case VL_COVDET_METHOD_DOG:
        case VL_COVDET_METHOD_HESSIAN:
        {
          /* scale-space extrema */
          float const * octave =
          vl_scalespace_get_level(self->css, o, cgeom.octaveFirstSubdivision) ;
          numExtrema = vl_find_local_extrema_3(&extrema, &extremaBufferSize,
                                               octave, width, height, depth,
                                               0.8 * self->peakThreshold);
          for (index = 0 ; index < numExtrema ; ++index) {
            VlCovDetExtremum3 refined ;
            VlCovDetFeature feature ;
            vl_bool ok ;
            memset(&feature, 0, sizeof(feature)) ;
            ok = vl_refine_local_extreum_3(&refined,
                                           octave, width, height, depth,
                                           extrema[3*index+0],
                                           extrema[3*index+1],
                                           extrema[3*index+2]) ;
            ok &= fabs(refined.peakScore) > self->peakThreshold ;
            ok &= refined.edgeScore < self->edgeThreshold ;
            if (ok) {
              double sigma = cgeom.baseScale *
              pow(2.0, o + (refined.z + cgeom.octaveFirstSubdivision)
                  / cgeom.octaveResolution) ;
              feature.frame.x = refined.x * step ;
              feature.frame.y = refined.y * step ;
              feature.frame.a11 = sigma ;
              feature.frame.a12 = 0.0 ;
              feature.frame.a21 = 0.0 ;
              feature.frame.a22 = sigma ;
              feature.peakScore = refined.peakScore ;
              feature.edgeScore = refined.edgeScore ;
              vl_covdet_append_feature(self, &feature) ;
            }
          }
          break ;
        }

        default:
        {
          for (s = cgeom.octaveFirstSubdivision ; s < cgeom.octaveLastSubdivision ; ++s) {
            /* space extrema */
            float const * level = vl_scalespace_get_level(self->css,o,s) ;
            numExtrema = vl_find_local_extrema_2(&extrema, &extremaBufferSize,
                                                 level,
                                                 width, height,
                                                 0.8 * self->peakThreshold);
            for (index = 0 ; index < numExtrema ; ++index) {
              VlCovDetExtremum2 refined ;
              VlCovDetFeature feature ;
              vl_bool ok ;
              memset(&feature, 0, sizeof(feature)) ;
              ok = vl_refine_local_extreum_2(&refined,
                                             level, width, height,
                                             extrema[2*index+0],
                                             extrema[2*index+1]);
              ok &= fabs(refined.peakScore) > self->peakThreshold ;
              ok &= refined.edgeScore < self->edgeThreshold ;
              if (ok) {
                double sigma = cgeom.baseScale *
                pow(2.0, o + (double)s / cgeom.octaveResolution) ;
                feature.frame.x = refined.x * step ;
                feature.frame.y = refined.y * step ;
                feature.frame.a11 = sigma ;
                feature.frame.a12 = 0.0 ;
                feature.frame.a21 = 0.0 ;
                feature.frame.a22 = sigma ;
                feature.peakScore = refined.peakScore ;
                feature.edgeScore = refined.edgeScore ;
                vl_covdet_append_feature(self, &feature) ;
              }
            }
          }
          break ;
        }
      }
    } /* next octave */

    if (extrema) { vl_free(extrema) ; extrema = 0 ; }
  }

  /* Laplacian scale selection for certain methods */
  switch (self->method) {
    case VL_COVDET_METHOD_HARRIS_LAPLACE :
    case VL_COVDET_METHOD_HESSIAN_LAPLACE :
      vl_covdet_extract_laplacian_scales (self) ;
      break ;
    default:
      break ;
  }

  if (self->nonExtremaSuppression) {
    vl_index i, j ;
    double tol = self->nonExtremaSuppression ;
    self->numNonExtremaSuppressed = 0 ;
    for (i = 0 ; i < (signed)self->numFeatures ; ++i) {
      double x = self->features[i].frame.x ;
      double y = self->features[i].frame.y ;
      double sigma = self->features[i].frame.a11 ;
      double score = self->features[i].peakScore ;

      for (j = 0 ; j < (signed)self->numFeatures ; ++j) {
        double dx_ = self->features[j].frame.x - x ;
        double dy_ = self->features[j].frame.y - y ;
        double sigma_ = self->features[j].frame.a11 ;
        double score_ = self->features[j].peakScore ;
        if (score_ == 0) continue ;
        if (sigma < (1+tol) * sigma_ &&
            sigma_ < (1+tol) * sigma &&
            vl_abs_d(dx_) < tol * sigma &&
            vl_abs_d(dy_) < tol * sigma &&
            vl_abs_d(score) > vl_abs_d(score_)) {
          self->features[j].peakScore = 0 ;
          self->numNonExtremaSuppressed ++ ;
        }
      }
    }
    j = 0 ;
    for (i = 0 ; i < (signed)self->numFeatures ; ++i) {
      VlCovDetFeature feature = self->features[i] ;
      if (self->features[i].peakScore != 0) {
        self->features[j++] = feature ;
      }
    }
    self->numFeatures = j ;
  }

  if (levelxx) vl_free(levelxx) ;
  if (levelyy) vl_free(levelyy) ;
  if (levelxy) vl_free(levelxy) ;
}

// Assembly:
subq $0x3c8, %rsp            # imm = 0x3C8
movq %rdi, 0x3c0(%rsp)
movq 0x3c0(%rsp), %rax
movq (%rax), %rsi
leaq 0x378(%rsp), %rdi
callq 0x9a40
movq $0x0, 0x328(%rsp)
movq $0x0, 0x320(%rsp)
movq $0x0, 0x318(%rsp)
movq 0x3c0(%rsp), %rax
movq $0x0, 0x58(%rax)
leaq 0x330(%rsp), %rdi
leaq 0x378(%rsp), %rsi
movl $0x48, %edx
callq 0x9640
movq 0x3c0(%rsp), %rax
cmpl $0x1, 0x10(%rax)
jne 0xe097
movq 0x360(%rsp), %rax
subq $0x1, %rax
movq %rax, 0x360(%rsp)
movq 0x3c0(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0xe152
movq 0x3c0(%rsp), %rax
movq 0x8(%rax), %rsi
leaq 0x2c0(%rsp), %rdi
callq 0x9a40
movq 0x300(%rsp), %rcx
movq %rsp, %rax
movq %rax, 0xc8(%rsp)
movq %rcx, 0x88(%rax)
movups 0x2c0(%rsp), %xmm0
movups 0x2d0(%rsp), %xmm1
movups 0x2e0(%rsp), %xmm2
movups 0x2f0(%rsp), %xmm3
movups %xmm3, 0x78(%rax)
movups %xmm2, 0x68(%rax)
movups %xmm1, 0x58(%rax)
movups %xmm0, 0x48(%rax)
movq 0x370(%rsp), %rcx
movq %rcx, 0x40(%rax)
movups 0x330(%rsp), %xmm0
movups 0x340(%rsp), %xmm1
movups 0x350(%rsp), %xmm2
movups 0x360(%rsp), %xmm3
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x9600
cmpl $0x0, %eax
jne 0xe1c4
movq 0x3c0(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0xe172
movq 0x3c0(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x9990
movq 0x370(%rsp), %rcx
movq %rsp, %rax
movq %rcx, 0x40(%rax)
movups 0x330(%rsp), %xmm0
movups 0x340(%rsp), %xmm1
movups 0x350(%rsp), %xmm2
movups 0x360(%rsp), %xmm3
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x9a30
movq %rax, %rcx
movq 0x3c0(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x3c0(%rsp), %rax
cmpl $0x4, 0x10(%rax)
je 0xe1e4
movq 0x3c0(%rsp), %rax
cmpl $0x6, 0x10(%rax)
jne 0xe26a
movq 0x3c0(%rsp), %rax
movq (%rax), %rsi
movq 0x388(%rsp), %rdx
leaq 0x2a8(%rsp), %rdi
callq 0x96c0
movq 0x2a8(%rsp), %rdi
imulq 0x2b0(%rsp), %rdi
shlq $0x2, %rdi
callq 0x9660
movq %rax, 0x328(%rsp)
movq 0x2a8(%rsp), %rdi
imulq 0x2b0(%rsp), %rdi
shlq $0x2, %rdi
callq 0x9660
movq %rax, 0x320(%rsp)
movq 0x2a8(%rsp), %rdi
imulq 0x2b0(%rsp), %rdi
shlq $0x2, %rdi
callq 0x9660
movq %rax, 0x318(%rsp)
movq 0x340(%rsp), %rax
movq %rax, 0x310(%rsp)
movq 0x310(%rsp), %rax
cmpq 0x348(%rsp), %rax
jg 0xe4d9
movq 0x3c0(%rsp), %rax
movq 0x8(%rax), %rsi
movq 0x310(%rsp), %rdx
leaq 0x290(%rsp), %rdi
callq 0x96c0
movq 0x358(%rsp), %rax
movq %rax, 0x308(%rsp)
movq 0x308(%rsp), %rax
cmpq 0x360(%rsp), %rax
jg 0xe4be
movq 0x3c0(%rsp), %rax
movq (%rax), %rdi
movq 0x310(%rsp), %rsi
movq 0x308(%rsp), %rdx
callq 0x9040
movq %rax, 0x288(%rsp)
movq 0x3c0(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x310(%rsp), %rsi
movq 0x308(%rsp), %rdx
callq 0x9040
movq %rax, 0x280(%rsp)
movq 0x3c0(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x310(%rsp), %rsi
movq 0x308(%rsp), %rdx
callq 0x9950
movsd %xmm0, 0x278(%rsp)
movq 0x3c0(%rsp), %rax
movl 0x10(%rax), %eax
movl %eax, 0xc4(%rsp)
subl $0x1, %eax
je 0xe3b5
jmp 0xe36b
movl 0xc4(%rsp), %eax
addl $-0x2, %eax
subl $0x2, %eax
jb 0xe468
jmp 0xe380
movl 0xc4(%rsp), %eax
subl $0x4, %eax
je 0xe416
jmp 0xe392
movl 0xc4(%rsp), %eax
subl $0x5, %eax
je 0xe468
jmp 0xe3a4
movl 0xc4(%rsp), %eax
subl $0x6, %eax
je 0xe416
jmp 0xe4a1
movq 0x280(%rsp), %rax
movq %rax, 0xb8(%rsp)
movq 0x3c0(%rsp), %rax
movq (%rax), %rdi
movq 0x310(%rsp), %rsi
movq 0x308(%rsp), %rdx
addq $0x1, %rdx
callq 0x9040
movq 0xb8(%rsp), %rdi
movq %rax, %rsi
movq 0x288(%rsp), %rdx
movq 0x290(%rsp), %rcx
movq 0x298(%rsp), %r8
callq 0xf140
jmp 0xe4a3
movq 0x280(%rsp), %rdi
movq 0x288(%rsp), %rsi
movq 0x290(%rsp), %rdx
movq 0x298(%rsp), %rcx
movsd 0x2a0(%rsp), %xmm0
movsd 0x278(%rsp), %xmm1
movsd 0x4acc0(%rip), %xmm2    # 0x59110
mulsd 0x278(%rsp), %xmm2
movsd 0x4aca7(%rip), %xmm3    # 0x59108
callq 0xf1c0
jmp 0xe4a3
movq 0x280(%rsp), %rdi
movq 0x288(%rsp), %rsi
movq 0x290(%rsp), %rdx
movq 0x298(%rsp), %rcx
movsd 0x2a0(%rsp), %xmm0
movsd 0x278(%rsp), %xmm1
callq 0xf580
jmp 0xe4a3
jmp 0xe4a3
jmp 0xe4a5
movq 0x308(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x308(%rsp)
jmp 0xe2c1
jmp 0xe4c0
movq 0x310(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x310(%rsp)
jmp 0xe27a
movq $0x0, 0x270(%rsp)
movq $0x0, 0x268(%rsp)
movq 0x340(%rsp), %rax
movq %rax, 0x310(%rsp)
movq 0x310(%rsp), %rax
cmpq 0x348(%rsp), %rax
jg 0xec4a
movq 0x3c0(%rsp), %rax
movq 0x8(%rax), %rsi
movq 0x310(%rsp), %rdx
leaq 0x240(%rsp), %rdi
callq 0x96c0
movsd 0x250(%rsp), %xmm0
movsd %xmm0, 0x238(%rsp)
movq 0x240(%rsp), %rax
movq %rax, 0x230(%rsp)
movq 0x248(%rsp), %rax
movq %rax, 0x228(%rsp)
movq 0x358(%rsp), %rcx
movq 0x360(%rsp), %rax
subq %rcx, %rax
incq %rax
movq %rax, 0x220(%rsp)
movq 0x3c0(%rsp), %rax
movl 0x10(%rax), %eax
decl %eax
subl $0x1, %eax
ja 0xe90e
jmp 0xe5a0
movq 0x3c0(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x310(%rsp), %rsi
movq 0x358(%rsp), %rdx
callq 0x9040
movq %rax, 0x218(%rsp)
movq 0x218(%rsp), %rdx
movq 0x230(%rsp), %rcx
movq 0x228(%rsp), %r8
movq 0x220(%rsp), %r9
movq 0x3c0(%rsp), %rax
movsd 0x4ab07(%rip), %xmm0    # 0x59100
mulsd 0x18(%rax), %xmm0
leaq 0x270(%rsp), %rdi
leaq 0x268(%rsp), %rsi
callq 0x9b10
movq %rax, 0x260(%rsp)
movq $0x0, 0x258(%rsp)
movq 0x258(%rsp), %rax
cmpq 0x260(%rsp), %rax
jae 0xe909
leaq 0x1c0(%rsp), %rdi
xorl %esi, %esi
movl $0x28, %edx
callq 0x9480
movq 0x218(%rsp), %rsi
movq 0x230(%rsp), %rdx
movq 0x228(%rsp), %rcx
movq 0x220(%rsp), %r8
movq 0x270(%rsp), %rax
imulq $0x3, 0x258(%rsp), %rdi
movq (%rax,%rdi,8), %r9
movq 0x270(%rsp), %rax
imulq $0x3, 0x258(%rsp), %rdi
movq 0x8(%rax,%rdi,8), %r10
movq 0x270(%rsp), %rax
imulq $0x3, 0x258(%rsp), %rdi
movq 0x10(%rax,%rdi,8), %rax
leaq 0x1e8(%rsp), %rdi
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x90d0
movl %eax, 0x1bc(%rsp)
movss 0x20c(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movaps 0x4aa6d(%rip), %xmm1    # 0x59150
pand %xmm1, %xmm0
movq 0x3c0(%rsp), %rax
ucomisd 0x18(%rax), %xmm0
seta %al
andb $0x1, %al
movzbl %al, %eax
andl 0x1bc(%rsp), %eax
movl %eax, 0x1bc(%rsp)
movss 0x210(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movq 0x3c0(%rsp), %rax
movsd 0x20(%rax), %xmm0
ucomisd %xmm1, %xmm0
seta %al
andb $0x1, %al
movzbl %al, %eax
andl 0x1bc(%rsp), %eax
movl %eax, 0x1bc(%rsp)
cmpl $0x0, 0x1bc(%rsp)
je 0xe8ee
movsd 0x368(%rsp), %xmm0
movsd %xmm0, 0xa0(%rsp)
cvtsi2ssq 0x310(%rsp), %xmm0
movss %xmm0, 0xa8(%rsp)
movss 0x208(%rsp), %xmm0
cvtsi2ssq 0x358(%rsp), %xmm1
addss %xmm1, %xmm0
movss %xmm0, 0xac(%rsp)
movq 0x350(%rsp), %rax
movq %rax, %rdx
shrq %rdx
movl %eax, %ecx
andl $0x1, %ecx
orq %rdx, %rcx
cvtsi2ss %rcx, %xmm0
addss %xmm0, %xmm0
cvtsi2ss %rax, %xmm1
movss %xmm1, 0xb0(%rsp)
testq %rax, %rax
movss %xmm0, 0xb4(%rsp)
js 0xe7de
movss 0xb0(%rsp), %xmm0
movss %xmm0, 0xb4(%rsp)
movss 0xa8(%rsp), %xmm0
movss 0xac(%rsp), %xmm1
movss 0xb4(%rsp), %xmm2
divss %xmm2, %xmm1
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x4a8d3(%rip), %xmm0    # 0x590e0
callq 0x92b0
movaps %xmm0, %xmm1
movsd 0xa0(%rsp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, 0x1b0(%rsp)
movss 0x200(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
mulsd 0x238(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x1c0(%rsp)
movss 0x204(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
mulsd 0x238(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x1c4(%rsp)
movsd 0x1b0(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x1c8(%rsp)
xorps %xmm0, %xmm0
movss %xmm0, 0x1cc(%rsp)
xorps %xmm0, %xmm0
movss %xmm0, 0x1d0(%rsp)
movsd 0x1b0(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x1d4(%rsp)
movss 0x20c(%rsp), %xmm0
movss %xmm0, 0x1d8(%rsp)
movss 0x210(%rsp), %xmm0
movss %xmm0, 0x1dc(%rsp)
movq 0x3c0(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
callq 0x9580
jmp 0xe8f0
movq 0x258(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x258(%rsp)
jmp 0xe627
jmp 0xec2f
movq 0x358(%rsp), %rax
movq %rax, 0x308(%rsp)
movq 0x308(%rsp), %rax
cmpq 0x360(%rsp), %rax
jge 0xec2d
movq 0x3c0(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x310(%rsp), %rsi
movq 0x308(%rsp), %rdx
callq 0x9040
movq %rax, 0x1a8(%rsp)
movq 0x1a8(%rsp), %rdx
movq 0x230(%rsp), %rcx
movq 0x228(%rsp), %r8
movq 0x3c0(%rsp), %rax
movsd 0x4a77b(%rip), %xmm0    # 0x59100
mulsd 0x18(%rax), %xmm0
leaq 0x270(%rsp), %rdi
leaq 0x268(%rsp), %rsi
callq 0x9630
movq %rax, 0x260(%rsp)
movq $0x0, 0x258(%rsp)
movq 0x258(%rsp), %rax
cmpq 0x260(%rsp), %rax
jae 0xec12
leaq 0x160(%rsp), %rdi
xorl %esi, %esi
movl $0x28, %edx
callq 0x9480
movq 0x1a8(%rsp), %rsi
movq 0x230(%rsp), %rdx
movq 0x228(%rsp), %rcx
movq 0x270(%rsp), %rax
movq 0x258(%rsp), %rdi
shlq %rdi
movq (%rax,%rdi,8), %r8
movq 0x270(%rsp), %rax
movq 0x258(%rsp), %rdi
shlq %rdi
movq 0x8(%rax,%rdi,8), %r9
leaq 0x188(%rsp), %rdi
callq 0x9780
movl %eax, 0x15c(%rsp)
movss 0x1a0(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movaps 0x4a704(%rip), %xmm1    # 0x59150
pand %xmm1, %xmm0
movq 0x3c0(%rsp), %rax
ucomisd 0x18(%rax), %xmm0
seta %al
andb $0x1, %al
movzbl %al, %eax
andl 0x15c(%rsp), %eax
movl %eax, 0x15c(%rsp)
movss 0x1a4(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movq 0x3c0(%rsp), %rax
movsd 0x20(%rax), %xmm0
ucomisd %xmm1, %xmm0
seta %al
andb $0x1, %al
movzbl %al, %eax
andl 0x15c(%rsp), %eax
movl %eax, 0x15c(%rsp)
cmpl $0x0, 0x15c(%rsp)
je 0xebf7
movsd 0x368(%rsp), %xmm0
movsd %xmm0, 0x98(%rsp)
cvtsi2sdq 0x310(%rsp), %xmm1
cvtsi2sdq 0x308(%rsp), %xmm0
movaps 0x4a67e(%rip), %xmm3    # 0x59160
movq 0x350(%rsp), %xmm2
punpckldq %xmm3, %xmm2    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
movapd 0x4a679(%rip), %xmm3    # 0x59170
subpd %xmm3, %xmm2
movaps %xmm2, %xmm3
unpckhpd %xmm2, %xmm2            # xmm2 = xmm2[1,1]
addsd %xmm3, %xmm2
divsd %xmm2, %xmm0
addsd %xmm0, %xmm1
movsd 0x4a5ca(%rip), %xmm0    # 0x590e0
callq 0x92b0
movaps %xmm0, %xmm1
movsd 0x98(%rsp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, 0x150(%rsp)
movss 0x198(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
mulsd 0x238(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x160(%rsp)
movss 0x19c(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
mulsd 0x238(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x164(%rsp)
movsd 0x150(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x168(%rsp)
xorps %xmm0, %xmm0
movss %xmm0, 0x16c(%rsp)
xorps %xmm0, %xmm0
movss %xmm0, 0x170(%rsp)
movsd 0x150(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x174(%rsp)
movss 0x1a0(%rsp), %xmm0
movss %xmm0, 0x178(%rsp)
movss 0x1a4(%rsp), %xmm0
movss %xmm0, 0x17c(%rsp)
movq 0x3c0(%rsp), %rdi
leaq 0x160(%rsp), %rsi
callq 0x9580
jmp 0xebf9
movq 0x258(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x258(%rsp)
jmp 0xe9b3
jmp 0xec14
movq 0x308(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x308(%rsp)
jmp 0xe91e
jmp 0xec2f
jmp 0xec31
movq 0x310(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x310(%rsp)
jmp 0xe501
cmpq $0x0, 0x270(%rsp)
je 0xec6e
movq 0x270(%rsp), %rdi
callq 0x9620
movq $0x0, 0x270(%rsp)
movq 0x3c0(%rsp), %rax
movl 0x10(%rax), %eax
addl $-0x3, %eax
subl $0x1, %eax
ja 0xec92
jmp 0xec83
movq 0x3c0(%rsp), %rdi
callq 0x9ab0
jmp 0xec94
jmp 0xec94
movq 0x3c0(%rsp), %rax
movsd 0x40(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xecb1
jp 0xecb1
jmp 0xf0ef
movq 0x3c0(%rsp), %rax
movsd 0x40(%rax), %xmm0
movsd %xmm0, 0x138(%rsp)
movq 0x3c0(%rsp), %rax
movq $0x0, 0x48(%rax)
movq $0x0, 0x148(%rsp)
movq 0x148(%rsp), %rax
movq 0x3c0(%rsp), %rcx
movq 0x58(%rcx), %rcx
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0xeff9
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rax
imulq $0x28, 0x148(%rsp), %rcx
addq %rcx, %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x130(%rsp)
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rax
imulq $0x28, 0x148(%rsp), %rcx
addq %rcx, %rax
movss 0x4(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x128(%rsp)
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rax
imulq $0x28, 0x148(%rsp), %rcx
addq %rcx, %rax
movss 0x8(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x120(%rsp)
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rax
imulq $0x28, 0x148(%rsp), %rcx
addq %rcx, %rax
movss 0x18(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x118(%rsp)
movq $0x0, 0x140(%rsp)
movq 0x140(%rsp), %rax
movq 0x3c0(%rsp), %rcx
movq 0x58(%rcx), %rcx
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0xefde
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rax
imulq $0x28, 0x140(%rsp), %rcx
addq %rcx, %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
subsd 0x130(%rsp), %xmm0
movsd %xmm0, 0x110(%rsp)
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rax
imulq $0x28, 0x140(%rsp), %rcx
addq %rcx, %rax
movss 0x4(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
subsd 0x128(%rsp), %xmm0
movsd %xmm0, 0x108(%rsp)
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rax
imulq $0x28, 0x140(%rsp), %rcx
addq %rcx, %rax
movss 0x8(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0x100(%rsp)
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rax
imulq $0x28, 0x140(%rsp), %rcx
addq %rcx, %rax
movss 0x18(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, 0xf8(%rsp)
movsd 0xf8(%rsp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xeea8
jp 0xeea8
jmp 0xefc5
movsd 0x120(%rsp), %xmm1
movsd 0x4a21f(%rip), %xmm0    # 0x590d8
addsd 0x138(%rsp), %xmm0
mulsd 0x100(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xefc3
movsd 0x100(%rsp), %xmm1
movsd 0x4a1f2(%rip), %xmm0    # 0x590d8
addsd 0x138(%rsp), %xmm0
mulsd 0x120(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xefc3
movsd 0x110(%rsp), %xmm0
callq 0xcd50
movaps %xmm0, %xmm1
movsd 0x138(%rsp), %xmm0
mulsd 0x120(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xefc3
movsd 0x108(%rsp), %xmm0
callq 0xcd50
movaps %xmm0, %xmm1
movsd 0x138(%rsp), %xmm0
mulsd 0x120(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xefc3
movsd 0x118(%rsp), %xmm0
callq 0xcd50
movsd %xmm0, 0x90(%rsp)
movsd 0xf8(%rsp), %xmm0
callq 0xcd50
movaps %xmm0, %xmm1
movsd 0x90(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xefc3
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rax
imulq $0x28, 0x140(%rsp), %rcx
addq %rcx, %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x18(%rax)
movq 0x3c0(%rsp), %rax
movq 0x48(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x48(%rax)
jmp 0xefc5
movq 0x140(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x140(%rsp)
jmp 0xedb6
jmp 0xefe0
movq 0x148(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x148(%rsp)
jmp 0xece3
movq $0x0, 0x140(%rsp)
movq $0x0, 0x148(%rsp)
movq 0x148(%rsp), %rax
movq 0x3c0(%rsp), %rcx
movq 0x58(%rcx), %rcx
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0xf0db
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rsi
imulq $0x28, 0x148(%rsp), %rax
addq %rax, %rsi
leaq 0xd0(%rsp), %rdi
movl $0x28, %edx
callq 0x9640
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rax
imulq $0x28, 0x148(%rsp), %rcx
addq %rcx, %rax
movss 0x18(%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0xf084
jp 0xf084
jmp 0xf0c0
movq 0x3c0(%rsp), %rax
movq 0x50(%rax), %rdi
movq 0x140(%rsp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, 0x140(%rsp)
imulq $0x28, %rax, %rax
addq %rax, %rdi
leaq 0xd0(%rsp), %rsi
movl $0x28, %edx
callq 0x9640
jmp 0xf0c2
movq 0x148(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x148(%rsp)
jmp 0xf011
movq 0x140(%rsp), %rcx
movq 0x3c0(%rsp), %rax
movq %rcx, 0x58(%rax)
cmpq $0x0, 0x328(%rsp)
je 0xf107
movq 0x328(%rsp), %rdi
callq 0x9620
cmpq $0x0, 0x320(%rsp)
je 0xf11f
movq 0x320(%rsp), %rdi
callq 0x9620
cmpq $0x0, 0x318(%rsp)
je 0xf137
movq 0x318(%rsp), %rdi
callq 0x9620
addq $0x3c8, %rsp            # imm = 0x3C8
retq
nop