// File: /workspace/github_cpp_makefile_star2_O3/Luthaf[P]zeopp/area_and_volume.cc
// Function: determineAccessibility(ATOM_NETWORK*, double, double, bool, std::vector<bool, std::allocator<bool>>*, VORONOI_NETWORK*)
void determineAccessibility(ATOM_NETWORK *atmnet, double r_probe_chan, double r_probe, bool excludePockets, vector<bool> *isAccessible, VORONOI_NETWORK *pointSet) {
  // Create a temporary copy of the atomic network in which each atom's radius has been increased by the probe radius
  ATOM_NETWORK newAtomNet;
  atmnet->copy(&newAtomNet);
  for(int i = 0; i < newAtomNet.numAtoms; i++){ newAtomNet.atoms[i].radius += r_probe; }  

  // Calculate and store the Voronoi network for this new atomic network
  VORONOI_NETWORK vornet;
  vector<BASIC_VCELL> vorcells;
  vector<VOR_CELL> advCells;

  container_periodic_poly *new_rad_con = (container_periodic_poly *)performVoronoiDecomp(true, &newAtomNet, &vornet, advCells, false, vorcells);

  vector<CHANNEL> channels = vector<CHANNEL>();
  vector<bool> accessInfo = vector<bool> ();
  CHANNEL::findChannels(&vornet, max(0.0, r_probe_chan - r_probe), &accessInfo, &channels);
  srand(randSeed);

  vector<Point> axsPoints = vector<Point> ();
  vector<Point> inaxsPoints = vector<Point> ();
  vector< pair<int, Point> > resampledInfo = vector< pair<int, Point> > ();  // List of resampled points and the id of the Voronoi cell to which they belong
  int resampleCount = 0;

  int num_accessible = 0;

  for(unsigned int i = 0; i < pointSet->nodes.size(); i++){
    bool overlaps = false;

    Point samplingPoint;
    if(resampleCount>0) {
      double change = 0.000001;
      samplingPoint = Point(pointSet->nodes.at(i).x+change, pointSet->nodes.at(i).y+change, pointSet->nodes.at(i).z+change);
    } else samplingPoint = Point(pointSet->nodes.at(i).x, pointSet->nodes.at(i).y, pointSet->nodes.at(i).z);

    double newAtomX, newAtomY, newAtomZ;
    int minAtomID;
    bool foundCell = new_rad_con->find_voronoi_cell(samplingPoint[0], samplingPoint[1], samplingPoint[2], newAtomX, newAtomY, newAtomZ, minAtomID);
    if(!foundCell){
	    cerr << "Error: Unable to find Voronoi cell for sampled point in AV calculation." << "\n"
	    << "Occurred for structure " << newAtomNet.name << "\n"
	    << "Exiting..." << "\n";
    	exit(1);
    }

    ATOM curAtom = atmnet->atoms[minAtomID];

    // Adjust sampling point so that it lies within the Voronoi cell of interest constructed previously
    samplingPoint = (samplingPoint.add(Point(curAtom.x, curAtom.y, curAtom.z).subtract(Point(newAtomX, newAtomY, newAtomZ))));

    double minDist = calcEuclideanDistance(samplingPoint[0], samplingPoint[1], samplingPoint[2], curAtom.x, curAtom.y, curAtom.z);
    if(minDist < r_probe + curAtom.radius - 0.00000001) overlaps = true;
    
    // If necessary, check Voronoi nodes of cell to determine accessibility of point
    if(!overlaps && excludePockets){
      BASIC_VCELL vcell = vorcells[minAtomID];
      Point circCenter = Point(curAtom.x, curAtom.y, curAtom.z);
      double samplingRadius = minDist;
      Point sampleRay = Point(samplingPoint[0]-curAtom.x, samplingPoint[1]-curAtom.y, samplingPoint[2]-curAtom.z);
      
      // Scan the nodes in the Voronoi cell to find if line can be drawn from the node to the sampling point
      bool foundNode = false;
      if(vcell.getNumNodes() == 0){
	      cerr << "Error: Voronoi cell of sampled point does not have any nodes" << "\n"
	      << "Point: " << samplingPoint[0] << " " << samplingPoint[1] << " " << samplingPoint[2] << "\n"
	      << "Voronoi cell is #" << minAtomID << " in structure " << newAtomNet.name << "\n"
	      << "Please contact the source code provider." << "\n"
	      << "Exiting..." << "\n";
	      exit(1);
      }
      for(int k = 0; k < vcell.getNumNodes(); k++){
	      Point nodePoint = vcell.getNodeCoord(k);  
	      bool nodeInsideSphere = (calcEuclideanDistance(nodePoint[0], nodePoint[1], nodePoint[2], circCenter[0], circCenter[1], circCenter[2]) < samplingRadius);
	      if(!nodeInsideSphere){
	        Point otherRay = samplingPoint.subtract(nodePoint);
	        double dotProduct = sampleRay.dot_product(otherRay);
          double dotProductMax = 1e-5;
	        if(dotProduct > dotProductMax) {
	          // Angle is less than 90 degrees and so the line segment intersects twice,
      	    // making the path not viable
	        }
	        else {
	          // Angle is at least 90 degrees and so the line segment interesects only once, 
	          // thereby representing a viable path
	          foundNode = true;
	          overlaps = !accessInfo.at(vcell.getNodeID(k));
	          break;
	        }
	      }
      }

      // Sampling failed due to lying on Voronoi cell face and numerical inaccurarcy. 
      // Record failure, resample and notify user later
      if(!foundNode){
	      resampleCount++;
	      resampledInfo.push_back(pair<int, Point> (minAtomID, samplingPoint));
	      i--;
      } else resampleCount = 0;
    }

    if(resampleCount==0) {
      if(!overlaps) num_accessible++;
      if(!overlaps) isAccessible->push_back(true); else isAccessible->push_back(false);
    }
  }

  // Warn user if points were resampled
  if(resampleCount != 0){
    cerr << "\n" << "\n"
    << "Warning: Resampled " << resampleCount << " points (preset coords, not random samples) out of " << pointSet->nodes.size()  
    << " when analyzing " << atmnet->name << "\n"
    << "\n" << "\n"; 
  }

  //FREE MEMORY
  delete new_rad_con;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x788, %rsp            # imm = 0x788
movq %rcx, %r15
movq %rdx, 0x158(%rsp)
movl %esi, 0x3c(%rsp)
movsd %xmm1, 0x60(%rsp)
movsd %xmm0, 0x20(%rsp)
movq %rdi, %r14
leaq 0x328(%rsp), %rbx
movq %rbx, %rdi
callq 0x5112c
movq %r14, 0x88(%rsp)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x52620
movslq 0x438(%rsp), %rcx
testq %rcx, %rcx
movsd 0x60(%rsp), %xmm1
jle 0x41b82
movq 0x618(%rsp), %rax
imulq $0x98, %rcx, %rcx
xorl %edx, %edx
movsd 0x30(%rax,%rdx), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x30(%rax,%rdx)
addq $0x98, %rdx
cmpq %rdx, %rcx
jne 0x41b66
leaq 0x298(%rsp), %rdi
callq 0x55288
xorpd %xmm0, %xmm0
leaq 0x1e0(%rsp), %r9
movapd %xmm0, (%r9)
xorl %eax, %eax
movq %rax, 0x10(%r9)
leaq 0x220(%rsp), %rcx
movq %rax, 0x10(%rcx)
movapd %xmm0, (%rcx)
leaq 0x328(%rsp), %rsi
leaq 0x298(%rsp), %rdx
movl $0x1, %edi
xorl %r8d, %r8d
callq 0x732c
movq %rax, %r12
leaq 0x200(%rsp), %rdx
xorpd %xmm2, %xmm2
movapd %xmm2, (%rdx)
xorl %eax, %eax
movq %rax, 0x10(%rdx)
movsd 0x20(%rsp), %xmm0
subsd 0x60(%rsp), %xmm0
xorpd %xmm1, %xmm1
maxsd %xmm1, %xmm0
leaq 0x1b0(%rsp), %rsi
movq %rax, 0x20(%rsi)
movapd %xmm2, 0x10(%rsi)
movapd %xmm2, (%rsi)
leaq 0x298(%rsp), %rdi
callq 0x73b1c
movl $0x3b4ca6f5, %edi       # imm = 0x3B4CA6F5
callq 0x4410
xorpd %xmm0, %xmm0
movapd %xmm0, 0x70(%rsp)
movq $0x0, 0x80(%rsp)
movq 0x50(%r15), %rax
cmpq 0x48(%r15), %rax
je 0x424a8
movl 0x3c(%rsp), %eax
xorb $0x1, %al
movl %eax, 0x3c(%rsp)
xorl %r14d, %r14d
leaq 0x40(%rsp), %rbp
leaq 0x190(%rsp), %rbx
leaq 0x310(%rsp), %r13
movl $0x0, 0x1c(%rsp)
movq $0x0, 0x58(%rsp)
xorpd %xmm0, %xmm0
xorpd %xmm1, %xmm1
xorpd %xmm2, %xmm2
movq %rbp, %rdi
callq 0x83f68
cmpl $0x0, 0x1c(%rsp)
jle 0x41cf1
movq 0x48(%r15), %rax
movq 0x50(%r15), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %r14, %rdx
jbe 0x42620
shlq $0x6, %r14
movsd (%rax,%r14), %xmm0
movsd 0x10f930(%rip), %xmm3   # 0x1515f8
addsd %xmm3, %xmm0
movsd 0x8(%rax,%r14), %xmm1
addsd %xmm3, %xmm1
movsd 0x10(%rax,%r14), %xmm2
addsd %xmm3, %xmm2
leaq 0xc0(%rsp), %rdi
callq 0x83f68
jmp 0x41d2e
movq 0x48(%r15), %rax
movq 0x50(%r15), %rdx
subq %rax, %rdx
sarq $0x6, %rdx
cmpq %r14, %rdx
jbe 0x427c6
shlq $0x6, %r14
movsd (%rax,%r14), %xmm0
movsd 0x8(%rax,%r14), %xmm1
movsd 0x10(%rax,%r14), %xmm2
leaq 0xc0(%rsp), %rdi
callq 0x83f68
movq 0xd0(%rsp), %rax
movq %rax, 0x50(%rsp)
movupd 0xc0(%rsp), %xmm0
movapd %xmm0, 0x40(%rsp)
movq %r15, %rbp
leaq 0x40(%rsp), %rdi
xorl %esi, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
leaq 0x40(%rsp), %rdi
movl $0x1, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
leaq 0x40(%rsp), %rdi
movl $0x2, %esi
callq 0x83f9a
movsd (%rax), %xmm2
movq %r12, %rdi
movsd 0x20(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
leaq 0x188(%rsp), %rsi
leaq 0x180(%rsp), %rdx
leaq 0x178(%rsp), %rcx
leaq 0x2c(%rsp), %r8
callq 0x149a10
testb %al, %al
je 0x42578
movq %r12, %r15
movslq 0x2c(%rsp), %rax
movq 0x88(%rsp), %rcx
movq 0x2f0(%rcx), %r14
imulq $0x98, %rax, %r12
movups (%r14,%r12), %xmm0
movups 0x10(%r14,%r12), %xmm1
movups 0x20(%r14,%r12), %xmm2
movupd 0x30(%r14,%r12), %xmm3
movaps %xmm0, 0xc0(%rsp)
movaps %xmm1, 0xd0(%rsp)
movaps %xmm2, 0xe0(%rsp)
movapd %xmm3, 0xf0(%rsp)
leaq 0x110(%rsp), %rax
movq %rax, 0x100(%rsp)
movq 0x40(%r14,%r12), %rsi
movq 0x48(%r14,%r12), %rdx
addq %rsi, %rdx
leaq 0x100(%rsp), %rdi
callq 0xf3ce
addq %r12, %r14
leaq 0x130(%rsp), %rax
movq %rax, 0x120(%rsp)
movq 0x60(%r14), %rsi
movq 0x68(%r14), %rdx
addq %rsi, %rdx
leaq 0x120(%rsp), %rdi
callq 0xf3ce
movb 0x90(%r14), %al
leaq 0x100(%rsp), %rcx
movb %al, 0x50(%rcx)
movups 0x80(%r14), %xmm0
movups %xmm0, 0x40(%rcx)
movsd 0xc0(%rsp), %xmm0
movsd 0xc8(%rsp), %xmm1
movsd 0xd0(%rsp), %xmm2
movq %rbx, %rdi
callq 0x83f68
movq %r15, %r12
movsd 0x188(%rsp), %xmm0
movsd 0x180(%rsp), %xmm1
movsd 0x178(%rsp), %xmm2
leaq 0x250(%rsp), %rdi
callq 0x83f68
movq 0x260(%rsp), %rax
movq %rax, 0x10(%rsp)
movupd 0x250(%rsp), %xmm0
movupd %xmm0, (%rsp)
leaq 0x268(%rsp), %rdi
movq %rbx, %rsi
callq 0x8404a
movq 0x278(%rsp), %rax
movq %rax, 0x10(%rsp)
movupd 0x268(%rsp), %xmm0
movupd %xmm0, (%rsp)
leaq 0x90(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x83f78
movq 0xa0(%rsp), %rax
movq %rax, 0x50(%rsp)
movupd 0x90(%rsp), %xmm0
movapd %xmm0, 0x40(%rsp)
leaq 0x40(%rsp), %r14
movq %r14, %rdi
xorl %esi, %esi
callq 0x83f9a
movq %rbp, %r15
movq %r14, %rbp
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %r14, %rdi
movl $0x1, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
movq %rbp, %rdi
movl $0x2, %esi
callq 0x83f9a
movsd (%rax), %xmm2
movsd 0xc0(%rsp), %xmm3
movsd 0xc8(%rsp), %xmm4
movsd 0xd0(%rsp), %xmm5
movsd 0x20(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
callq 0x84cbb
movsd 0xf0(%rsp), %xmm1
addsd 0x60(%rsp), %xmm1
addsd 0x10f622(%rip), %xmm1   # 0x151600
movsd %xmm0, 0x160(%rsp)
ucomisd %xmm0, %xmm1
seta %r14b
movl %r14d, %eax
orb 0x3c(%rsp), %al
jne 0x4231c
movslq 0x2c(%rsp), %rax
leaq (%rax,%rax,2), %r14
shlq $0x4, %r14
addq 0x1e0(%rsp), %r14
leaq 0x90(%rsp), %rdi
movq %r14, %rsi
callq 0xe868
addq $0x18, %r14
leaq 0xa8(%rsp), %rdi
movq %r14, %rsi
callq 0xe8f8
movsd 0xc0(%rsp), %xmm0
movsd 0xc8(%rsp), %xmm1
movsd 0xd0(%rsp), %xmm2
movq %r13, %rdi
callq 0x83f68
movq %rbp, %rdi
xorl %esi, %esi
callq 0x83f9a
movsd (%rax), %xmm0
subsd 0xc0(%rsp), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %rbp, %rdi
movl $0x1, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
movsd 0xc8(%rsp), %xmm0
movsd %xmm0, 0x68(%rsp)
movq %rbp, %rdi
movl $0x2, %esi
callq 0x83f9a
movsd 0x30(%rsp), %xmm1
subsd 0x68(%rsp), %xmm1
movsd (%rax), %xmm2
subsd 0xd0(%rsp), %xmm2
leaq 0x280(%rsp), %rdi
movsd 0x20(%rsp), %xmm0
callq 0x83f68
leaq 0x90(%rsp), %rdi
callq 0x6bc4a
testl %eax, %eax
je 0x42631
xorl %r14d, %r14d
leaq 0x90(%rsp), %rdi
callq 0x6bc4a
cmpl %eax, %r14d
jge 0x42236
movq %rbx, %rdi
leaq 0x90(%rsp), %rsi
movl %r14d, %edx
callq 0x6bc5c
movq %rbx, %rdi
xorl %esi, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movsd %xmm0, 0x20(%rsp)
movq %rbx, %rdi
movl $0x1, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
movq %rbx, %rdi
movl $0x2, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movsd %xmm0, 0x68(%rsp)
movq %r13, %rdi
xorl %esi, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movsd %xmm0, 0x170(%rsp)
movq %r13, %rdi
movl $0x1, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movsd %xmm0, 0x168(%rsp)
movq %r13, %rdi
movl $0x2, %esi
callq 0x83f9a
movsd (%rax), %xmm5
movsd 0x20(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
movsd 0x68(%rsp), %xmm2
movsd 0x170(%rsp), %xmm3
movsd 0x168(%rsp), %xmm4
callq 0x84cbb
movsd 0x160(%rsp), %xmm1
ucomisd %xmm0, %xmm1
ja 0x4222e
movq 0x1a0(%rsp), %rax
movq %rax, 0x10(%rsp)
movupd 0x190(%rsp), %xmm0
movupd %xmm0, (%rsp)
leaq 0x238(%rsp), %rdi
movq %rbp, %rsi
callq 0x8404a
movq 0x248(%rsp), %rax
movq %rax, 0x10(%rsp)
movupd 0x238(%rsp), %xmm0
movupd %xmm0, (%rsp)
leaq 0x280(%rsp), %rdi
callq 0x840b8
ucomisd 0x10f3dc(%rip), %xmm0   # 0x151608
jbe 0x42291
incl %r14d
jmp 0x420ec
movl 0x2c(%rsp), %eax
movl %eax, 0x190(%rsp)
movq 0x50(%rsp), %rax
leaq 0x198(%rsp), %rcx
movq %rax, 0x10(%rcx)
movapd 0x40(%rsp), %xmm0
movupd %xmm0, (%rcx)
movq 0x78(%rsp), %rsi
cmpq 0x80(%rsp), %rsi
je 0x422c2
movupd 0x190(%rsp), %xmm0
movupd 0x1a0(%rsp), %xmm1
movupd %xmm1, 0x10(%rsi)
movupd %xmm0, (%rsi)
addq $0x20, %rsi
movq %rsi, 0x78(%rsp)
jmp 0x422cf
leaq 0x90(%rsp), %rdi
movl %r14d, %esi
callq 0x6bc7a
movslq %eax, %rsi
leaq 0x1b0(%rsp), %rdi
callq 0xee36
testq %rdx, (%rax)
sete %r14b
movl $0x0, 0x1c(%rsp)
jmp 0x422e2
leaq 0x70(%rsp), %rdi
movq %rbx, %rdx
callq 0x492e8
incl 0x1c(%rsp)
movq 0x58(%rsp), %rax
decl %eax
movq %rax, 0x58(%rsp)
xorl %r14d, %r14d
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0x422ff
movq 0xb8(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x4231c
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
cmpl $0x0, 0x1c(%rsp)
jne 0x42338
xorb $0x1, %r14b
movzbl %r14b, %esi
movq 0x158(%rsp), %rdi
callq 0xea58
movq 0x120(%rsp), %rdi
leaq 0x130(%rsp), %rax
cmpq %rax, %rdi
je 0x4235d
movq 0x130(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x100(%rsp), %rdi
leaq 0x110(%rsp), %rax
cmpq %rax, %rdi
je 0x42382
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x4470
movq 0x50(%r15), %rax
subq 0x48(%r15), %rax
movq 0x58(%rsp), %rcx
incl %ecx
sarq $0x6, %rax
movq %rcx, %r14
movq %rcx, 0x58(%rsp)
cmpq %rcx, %rax
ja 0x41c83
cmpl $0x0, 0x1c(%rsp)
je 0x424a8
movq 0x152c38(%rip), %rdi    # 0x194ff0
leaq 0x11125f(%rip), %rsi    # 0x15361e
movl $0x1, %edx
callq 0x44e0
movq 0x152c20(%rip), %rdi    # 0x194ff0
leaq 0x111247(%rip), %rsi    # 0x15361e
movl $0x1, %edx
callq 0x44e0
movq 0x152c08(%rip), %rdi    # 0x194ff0
leaq 0x10f3df(%rip), %rsi    # 0x1517ce
movl $0x13, %edx
callq 0x44e0
movq 0x152bf0(%rip), %rdi    # 0x194ff0
movl 0x1c(%rsp), %esi
callq 0x4750
movq %rax, %rbx
leaq 0x10f7c6(%rip), %rsi    # 0x151bd9
movl $0x33, %edx
movq %rax, %rdi
callq 0x44e0
movq 0x50(%r15), %rsi
subq 0x48(%r15), %rsi
sarq $0x6, %rsi
movq %rbx, %rdi
callq 0x42b0
movq %rax, %rbx
leaq 0x11af28(%rip), %rsi    # 0x15d366
movl $0x10, %edx
movq %rax, %rdi
callq 0x44e0
movq 0x88(%rsp), %rax
movq 0x320(%rax), %rsi
movq 0x328(%rax), %rdx
movq %rbx, %rdi
callq 0x44e0
movq %rax, %rbx
leaq 0x1111ab(%rip), %rsi    # 0x15361e
movl $0x1, %edx
movq %rax, %rdi
callq 0x44e0
leaq 0x111197(%rip), %rsi    # 0x15361e
movl $0x1, %edx
movq %rbx, %rdi
callq 0x44e0
leaq 0x111183(%rip), %rsi    # 0x15361e
movl $0x1, %edx
movq %rbx, %rdi
callq 0x44e0
testq %r12, %r12
je 0x424c4
movq %r12, %rdi
addq $0x1f8, %rdi            # imm = 0x1F8
callq 0xf0ba
movq %r12, %rdi
callq 0x148936
movl $0x298, %esi            # imm = 0x298
movq %r12, %rdi
callq 0x4470
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x424eb
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x1b0(%rsp), %rdi
testq %rdi, %rdi
je 0x42508
movq 0x1d0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
leaq 0x200(%rsp), %rdi
callq 0x48bbc
leaq 0x220(%rsp), %rdi
callq 0xec34
leaq 0x1e0(%rsp), %rdi
callq 0xec64
movq 0x2f8(%rsp), %rdi
testq %rdi, %rdi
je 0x4254c
movq 0x308(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
leaq 0x2e0(%rsp), %rdi
callq 0xf256
leaq 0x328(%rsp), %rdi
callq 0xec94
addq $0x788, %rsp            # imm = 0x788
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x152a71(%rip), %rdi    # 0x194ff0
leaq 0x10f564(%rip), %rsi    # 0x151aea
movl $0x47, %edx
callq 0x44e0
movq 0x152a59(%rip), %rdi    # 0x194ff0
leaq 0x111080(%rip), %rsi    # 0x15361e
movl $0x1, %edx
callq 0x44e0
movq 0x152a41(%rip), %rdi    # 0x194ff0
leaq 0x10f57c(%rip), %rsi    # 0x151b32
movl $0x17, %edx
callq 0x44e0
movq 0x648(%rsp), %rsi
movq 0x650(%rsp), %rdx
movq 0x152a19(%rip), %rdi    # 0x194ff0
callq 0x44e0
movq %rax, %rbx
leaq 0x111038(%rip), %rsi    # 0x15361e
movl $0x1, %edx
movq %rax, %rdi
callq 0x44e0
leaq 0x1120d0(%rip), %rsi    # 0x1546ca
movl $0xa, %edx
movq %rbx, %rdi
callq 0x44e0
leaq 0x111010(%rip), %rsi    # 0x15361e
movq %rbx, %rdi
callq 0x4440
movl $0x1, %edi
callq 0x72bc
leaq 0x10b0ce(%rip), %rdi    # 0x14d6f5
movq %r14, %rsi
xorl %eax, %eax
callq 0x4630
movq 0x1529b8(%rip), %rdi    # 0x194ff0
leaq 0x10f50b(%rip), %rsi    # 0x151b4a
movl $0x3c, %edx
callq 0x44e0
movq 0x1529a0(%rip), %rdi    # 0x194ff0
leaq 0x110fc7(%rip), %rsi    # 0x15361e
movl $0x1, %edx
callq 0x44e0
movq 0x152988(%rip), %rdi    # 0x194ff0
leaq 0x10f518(%rip), %rsi    # 0x151b87
movl $0x7, %edx
callq 0x44e0
leaq 0x40(%rsp), %rdi
xorl %esi, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movq 0x152960(%rip), %rdi    # 0x194ff0
callq 0x46b0
movq %rax, %rbx
leaq 0x112f37(%rip), %rsi    # 0x1555d6
movl $0x1, %edx
movq %rax, %rdi
callq 0x44e0
leaq 0x40(%rsp), %rdi
movl $0x1, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movq %rbx, %rdi
callq 0x46b0
movq %rax, %rbx
leaq 0x112f05(%rip), %rsi    # 0x1555d6
movl $0x1, %edx
movq %rax, %rdi
callq 0x44e0
leaq 0x40(%rsp), %rdi
movl $0x2, %esi
callq 0x83f9a
movsd (%rax), %xmm0
movq %rbx, %rdi
callq 0x46b0
movq %rax, %rbx
leaq 0x110f1b(%rip), %rsi    # 0x15361e
movl $0x1, %edx
movq %rax, %rdi
callq 0x44e0
leaq 0x10f478(%rip), %rsi    # 0x151b8f
movl $0x11, %edx
movq %rbx, %rdi
callq 0x44e0
movl 0x2c(%rsp), %esi
movq %rbx, %rdi
callq 0x4750
movq %rax, %rbx
leaq 0x10f467(%rip), %rsi    # 0x151ba1
movl $0xe, %edx
movq %rax, %rdi
callq 0x44e0
movq 0x648(%rsp), %rsi
movq 0x650(%rsp), %rdx
movq %rbx, %rdi
callq 0x44e0
movq %rax, %rbx
leaq 0x110eb5(%rip), %rsi    # 0x15361e
movl $0x1, %edx
movq %rax, %rdi
callq 0x44e0
leaq 0x10f433(%rip), %rsi    # 0x151bb0
movl $0x28, %edx
movq %rbx, %rdi
callq 0x44e0
leaq 0x110e8d(%rip), %rsi    # 0x15361e
movl $0x1, %edx
movq %rbx, %rdi
callq 0x44e0
leaq 0x111f25(%rip), %rsi    # 0x1546ca
movl $0xa, %edx
movq %rbx, %rdi
callq 0x44e0
leaq 0x110e65(%rip), %rsi    # 0x15361e
movq %rbx, %rdi
callq 0x4440
jmp 0x42616
leaq 0x10af28(%rip), %rdi    # 0x14d6f5
movq %r14, %rsi
xorl %eax, %eax
callq 0x4630
movq %rax, %rbx
jmp 0x428a6
movq %rax, %rbx
jmp 0x428dc
jmp 0x427e9
movq %rax, %rbx
jmp 0x42903
jmp 0x4286f
jmp 0x4285b
jmp 0x4286f
jmp 0x4285b
jmp 0x4285b
jmp 0x42862
jmp 0x4286f
jmp 0x4286f
movq %rax, %rbx
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x4287f
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
jmp 0x4287f
jmp 0x4286f
jmp 0x4285b
jmp 0x4285b
jmp 0x4285b
jmp 0x4285b
jmp 0x4285b
movq %rax, %rbx
movq 0x100(%rsp), %rdi
leaq 0x110(%rsp), %rax
cmpq %rax, %rdi
je 0x4288c
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x4470
jmp 0x4288c
jmp 0x4286f
movq %rax, %rbx
jmp 0x4288c
jmp 0x42862
movq %rax, %rbx
jmp 0x4287f
jmp 0x4286f
jmp 0x4286f
jmp 0x4286f
jmp 0x4286f
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0xf4ca
leaq 0xc0(%rsp), %rdi
callq 0x2f5e8
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x428a6
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x1b0(%rsp), %rdi
testq %rdi, %rdi
je 0x428cf
movq 0x1d0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq $0x0, 0x1b0(%rsp)
leaq 0x200(%rsp), %rdi
callq 0x48bbc
leaq 0x220(%rsp), %rdi
callq 0xec34
leaq 0x1e0(%rsp), %rdi
callq 0xec64
leaq 0x298(%rsp), %rdi
callq 0xeb2a
leaq 0x328(%rsp), %rdi
callq 0xec94
movq %rbx, %rdi
callq 0x4780