// File: Luthaf[P]zeopp/networkio.cc
// Function: writeToXYZ(char*, ATOM_NETWORK*, bool, bool)
bool writeToXYZ(char *filename, ATOM_NETWORK *cell, bool is_supercell, bool is_duplicate_perimeter_atoms){
  int num_cells = SUPERCELL_SIZE; //defined in networkio.h
  if(!is_supercell) num_cells = 1;
  fstream output;
  output.open(filename, fstream::out);
  if(!output.is_open()){
    cerr << "Error: Failed to open .xyz output file " << filename << endl;
    //cerr << "Exiting ..." << "\n";
    //exit(1);
    return false;
  }
  else{
    cout << "Writing atom network information to " << filename << "\n";

    //1) construct a new vector of atoms, which contains any supercell projections and duplicates
    vector<ATOM> new_atoms;
    for(int i=0; i<cell->numAtoms; i++) {
      ATOM atom = cell->atoms.at(i);
      Point orig_abc(atom.a_coord, atom.b_coord, atom.c_coord);
      Point uc_abc = cell->shiftABCInUC(orig_abc);
      //first, determine all the supercell images of this atom as required
      for(int a=0; a<num_cells; a++) {
        for(int b=0; b<num_cells; b++) {
          for(int c=0; c<num_cells; c++) {
            atom.a_coord=uc_abc[0]+a;
            atom.b_coord=uc_abc[1]+b;
            atom.c_coord=uc_abc[2]+c;
            // Do xyz conversion later, when needed for output
            new_atoms.push_back(atom);
            //now we have this atom, be it the original or a supercell projection, find the duplicates
            if(is_duplicate_perimeter_atoms) {
              double dupe_thresh = 0.001;
              if(atom.a_coord<dupe_thresh) {
                ATOM dupe = atom;
                dupe.a_coord = atom.a_coord+num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.b_coord<dupe_thresh) {
                ATOM dupe = atom;
                dupe.b_coord = atom.b_coord+num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.c_coord<dupe_thresh) {
                ATOM dupe = atom;
                dupe.c_coord = atom.c_coord+num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.a_coord<dupe_thresh && atom.b_coord<dupe_thresh) {
                ATOM dupe = atom;
                dupe.a_coord = atom.a_coord+num_cells;
                dupe.b_coord = atom.b_coord+num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.a_coord<dupe_thresh && atom.c_coord<dupe_thresh) {
                ATOM dupe = atom;
                dupe.a_coord = atom.a_coord+num_cells;
                dupe.c_coord = atom.c_coord+num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.b_coord<dupe_thresh && atom.c_coord<dupe_thresh) {
                ATOM dupe = atom;
                dupe.b_coord = atom.b_coord+num_cells;
                dupe.c_coord = atom.c_coord+num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.a_coord<dupe_thresh && atom.b_coord<dupe_thresh && atom.c_coord<dupe_thresh) {
                ATOM dupe = atom;
                dupe.a_coord = atom.a_coord+num_cells;
                dupe.b_coord = atom.b_coord+num_cells;
                dupe.c_coord = atom.c_coord+num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.a_coord>((double)(num_cells))-dupe_thresh) {
                ATOM dupe = atom;
                dupe.a_coord = atom.a_coord-num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.b_coord>((double)(num_cells))-dupe_thresh) {
                ATOM dupe = atom;
                dupe.b_coord = atom.b_coord-num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.c_coord>((double)(num_cells))-dupe_thresh) {
                ATOM dupe = atom;
                dupe.c_coord = atom.c_coord-num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.a_coord>((double)(num_cells))-dupe_thresh && atom.b_coord>((double)(num_cells))-dupe_thresh) {
                ATOM dupe = atom;
                dupe.a_coord = atom.a_coord-num_cells;
                dupe.b_coord = atom.b_coord-num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.a_coord>((double)(num_cells))-dupe_thresh && atom.c_coord>((double)(num_cells))-dupe_thresh) {
                ATOM dupe = atom;
                dupe.a_coord = atom.a_coord-num_cells;
                dupe.c_coord = atom.c_coord-num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.b_coord>((double)(num_cells))-dupe_thresh && atom.c_coord>((double)(num_cells))-dupe_thresh) {
                ATOM dupe = atom;
                dupe.b_coord = atom.b_coord-num_cells;
                dupe.c_coord = atom.c_coord-num_cells;
                new_atoms.push_back(dupe);
              }
              if(atom.a_coord>((double)(num_cells))-dupe_thresh && atom.b_coord>((double)(num_cells))-dupe_thresh && atom.c_coord>((double)(num_cells))-dupe_thresh) {
                ATOM dupe = atom;
                dupe.a_coord = atom.a_coord-num_cells;
                dupe.b_coord = atom.b_coord-num_cells;
                dupe.c_coord = atom.c_coord-num_cells;
                new_atoms.push_back(dupe);
              }
            }
          }
        }
      }
    }

    //2) write atom data
    output << new_atoms.size() << "\n" << "\n";
    for(int i=0; i<new_atoms.size(); i++) {
      Point p = cell->abc_to_xyz(new_atoms.at(i).a_coord, new_atoms.at(i).b_coord, new_atoms.at(i).c_coord);
      output << new_atoms.at(i).type << " " << p[0] << " " << p[1] << " " << p[2] << "\n";
    }
  }
  output.close();
  return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xce0, %rsp            # imm = 0xCE0
movb %cl, %al
movb %dl, %cl
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
andb $0x1, %cl
movb %cl, -0x19(%rbp)
andb $0x1, %al
movb %al, -0x1a(%rbp)
movl $0x2, -0x20(%rbp)
testb $0x1, -0x19(%rbp)
jne 0x57276
movl $0x1, -0x20(%rbp)
leaq -0x230(%rbp), %rdi
movq %rdi, -0xbd0(%rbp)
callq 0x5660
movq -0xbd0(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x10, %edx
callq 0x54b0
jmp 0x572a0
leaq -0x230(%rbp), %rdi
callq 0x58b0
movb %al, -0xbd1(%rbp)
jmp 0x572b4
movb -0xbd1(%rbp), %al
testb $0x1, %al
jne 0x57334
jmp 0x572c0
movq 0x21bd29(%rip), %rdi    # 0x272ff0
leaq 0x19c5f8(%rip), %rsi    # 0x1f38c6
callq 0x5540
movq %rax, -0xbe0(%rbp)
jmp 0x572dc
movq -0xbe0(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x5540
movq %rax, -0xbe8(%rbp)
jmp 0x572f5
movq -0xbe8(%rbp), %rdi
movq 0x21bc95(%rip), %rsi    # 0x272f98
callq 0x55b0
jmp 0x5730a
movb $0x0, -0x1(%rbp)
movl $0x1, -0x240(%rbp)
jmp 0x582f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
jmp 0x5830f
movq 0x21bc85(%rip), %rdi    # 0x272fc0
leaq 0x19c261(%rip), %rsi    # 0x1f35a3
callq 0x5540
movq %rax, -0xbf0(%rbp)
jmp 0x57350
movq -0xbf0(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x5540
movq %rax, -0xbf8(%rbp)
jmp 0x57369
movq -0xbf8(%rbp), %rdi
leaq 0x1a22ae(%rip), %rsi    # 0x1f9625
callq 0x5540
jmp 0x5737e
leaq -0x258(%rbp), %rdi
callq 0x59bd0
movl $0x0, -0x25c(%rbp)
movl -0x25c(%rbp), %eax
movq -0x18(%rbp), %rcx
cmpl 0x110(%rcx), %eax
jge 0x57ff7
movq -0x18(%rbp), %rdi
addq $0x2f0, %rdi            # imm = 0x2F0
movslq -0x25c(%rbp), %rsi
callq 0xf090
movq %rax, -0xc00(%rbp)
jmp 0x573ca
movq -0xc00(%rbp), %rsi
leaq -0x2f8(%rbp), %rdi
callq 0xf0d0
jmp 0x573df
movsd -0x2e0(%rbp), %xmm0
movsd -0x2d8(%rbp), %xmm1
movsd -0x2d0(%rbp), %xmm2
leaq -0x310(%rbp), %rdi
callq 0xe9c70
jmp 0x57405
movq -0x18(%rbp), %rsi
movq -0x300(%rbp), %rax
movq %rax, -0x330(%rbp)
movups -0x310(%rbp), %xmm0
movaps %xmm0, -0x340(%rbp)
movq -0x330(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x340(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x328(%rbp), %rdi
callq 0x97e90
jmp 0x5744b
movl $0x0, -0x344(%rbp)
movl -0x344(%rbp), %eax
cmpl -0x20(%rbp), %eax
jge 0x57fc6
movl $0x0, -0x348(%rbp)
movl -0x348(%rbp), %eax
cmpl -0x20(%rbp), %eax
jge 0x57fb0
movl $0x0, -0x34c(%rbp)
movl -0x34c(%rbp), %eax
cmpl -0x20(%rbp), %eax
jge 0x57f9a
leaq -0x328(%rbp), %rdi
xorl %esi, %esi
callq 0xe9d70
movq %rax, -0xc08(%rbp)
jmp 0x574ad
movq -0xc08(%rbp), %rax
movsd (%rax), %xmm0
cvtsi2sdl -0x344(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x2e0(%rbp)
leaq -0x328(%rbp), %rdi
movl $0x1, %esi
callq 0xe9d70
movq %rax, -0xc10(%rbp)
jmp 0x574e6
movq -0xc10(%rbp), %rax
movsd (%rax), %xmm0
cvtsi2sdl -0x348(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x2d8(%rbp)
leaq -0x328(%rbp), %rdi
movl $0x2, %esi
callq 0xe9d70
movq %rax, -0xc18(%rbp)
jmp 0x5751f
movq -0xc18(%rbp), %rax
movsd (%rax), %xmm0
cvtsi2sdl -0x34c(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x2d0(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf190
jmp 0x57553
testb $0x1, -0x1a(%rbp)
je 0x57f84
movsd 0x19aad3(%rip), %xmm0   # 0x1f2038
movsd %xmm0, -0x358(%rbp)
movsd -0x2e0(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x57629
leaq -0x3f0(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x5759c
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x3d8(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0xf190
jmp 0x575ca
leaq -0x3f0(%rbp), %rdi
callq 0xf200
jmp 0x57629
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
jmp 0x582cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
jmp 0x57fe6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2d8(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x576b3
leaq -0x488(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x57654
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x468(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x488(%rbp), %rsi
callq 0xf190
jmp 0x57682
leaq -0x488(%rbp), %rdi
callq 0xf200
jmp 0x576b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0x488(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2d0(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x5773d
leaq -0x520(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x576de
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x4f8(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0xf190
jmp 0x5770c
leaq -0x520(%rbp), %rdi
callq 0xf200
jmp 0x5773d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0x520(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2e0(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x577fe
movsd -0x2d8(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x577fe
leaq -0x5b8(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x57786
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x5a0(%rbp)
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x598(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
callq 0xf190
jmp 0x577cd
leaq -0x5b8(%rbp), %rdi
callq 0xf200
jmp 0x577fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0x5b8(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2e0(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x578bf
movsd -0x2d0(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x578bf
leaq -0x650(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x57847
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x638(%rbp)
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x628(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x650(%rbp), %rsi
callq 0xf190
jmp 0x5788e
leaq -0x650(%rbp), %rdi
callq 0xf200
jmp 0x578bf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0x650(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2d8(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x57980
movsd -0x2d0(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x57980
leaq -0x6e8(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x57908
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x6c8(%rbp)
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x6c0(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x6e8(%rbp), %rsi
callq 0xf190
jmp 0x5794f
leaq -0x6e8(%rbp), %rdi
callq 0xf200
jmp 0x57980
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0x6e8(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2e0(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x57a74
movsd -0x2d8(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x57a74
movsd -0x2d0(%rbp), %xmm1
movsd -0x358(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x57a74
leaq -0x780(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x579e3
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x768(%rbp)
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x760(%rbp)
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x758(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x780(%rbp), %rsi
callq 0xf190
jmp 0x57a43
leaq -0x780(%rbp), %rdi
callq 0xf200
jmp 0x57a74
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0x780(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57b03
leaq -0x818(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x57aa4
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x800(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x818(%rbp), %rsi
callq 0xf190
jmp 0x57ad2
leaq -0x818(%rbp), %rdi
callq 0xf200
jmp 0x57b03
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0x818(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57b92
leaq -0x8b0(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x57b33
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x890(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0xf190
jmp 0x57b61
leaq -0x8b0(%rbp), %rdi
callq 0xf200
jmp 0x57b92
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0x8b0(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57c21
leaq -0x948(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x57bc2
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x920(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x948(%rbp), %rsi
callq 0xf190
jmp 0x57bf0
leaq -0x948(%rbp), %rdi
callq 0xf200
jmp 0x57c21
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0x948(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57cec
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57cec
leaq -0x9e0(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x57c74
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x9c8(%rbp)
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x9c0(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0x9e0(%rbp), %rsi
callq 0xf190
jmp 0x57cbb
leaq -0x9e0(%rbp), %rdi
callq 0xf200
jmp 0x57cec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0x9e0(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57db7
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57db7
leaq -0xa78(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x57d3f
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0xa60(%rbp)
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0xa50(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0xa78(%rbp), %rsi
callq 0xf190
jmp 0x57d86
leaq -0xa78(%rbp), %rdi
callq 0xf200
jmp 0x57db7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0xa78(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57e82
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57e82
leaq -0xb10(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x57e0a
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0xaf0(%rbp)
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0xae8(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0xb10(%rbp), %rsi
callq 0xf190
jmp 0x57e51
leaq -0xb10(%rbp), %rdi
callq 0xf200
jmp 0x57e82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0xb10(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57f82
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57f82
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd -0x358(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x57f82
leaq -0xba8(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0xf0d0
jmp 0x57ef4
movsd -0x2e0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0xb90(%rbp)
movsd -0x2d8(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0xb88(%rbp)
movsd -0x2d0(%rbp), %xmm0
cvtsi2sdl -0x20(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0xb80(%rbp)
leaq -0x258(%rbp), %rdi
leaq -0xba8(%rbp), %rsi
callq 0xf190
jmp 0x57f54
leaq -0xba8(%rbp), %rdi
callq 0xf200
jmp 0x57f82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x238(%rbp)
movl %eax, -0x23c(%rbp)
leaq -0xba8(%rbp), %rdi
callq 0xf200
jmp 0x57fe6
jmp 0x57f84
jmp 0x57f86
movl -0x34c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34c(%rbp)
jmp 0x57487
jmp 0x57f9c
movl -0x348(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x348(%rbp)
jmp 0x5746e
jmp 0x57fb2
movl -0x344(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x344(%rbp)
jmp 0x57455
leaq -0x2f8(%rbp), %rdi
callq 0xf200
movl -0x25c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x25c(%rbp)
jmp 0x57394
leaq -0x2f8(%rbp), %rdi
callq 0xf200
jmp 0x582cb
leaq -0x220(%rbp), %rax
movq %rax, -0xc28(%rbp)
leaq -0x258(%rbp), %rdi
callq 0xf060
movq -0xc28(%rbp), %rdi
movq %rax, %rsi
callq 0x5160
movq %rax, -0xc20(%rbp)
jmp 0x58029
movq -0xc20(%rbp), %rdi
leaq 0x1a15ee(%rip), %rsi    # 0x1f9625
callq 0x5540
movq %rax, -0xc30(%rbp)
jmp 0x58045
movq -0xc30(%rbp), %rdi
leaq 0x1a15d2(%rip), %rsi    # 0x1f9625
callq 0x5540
jmp 0x5805a
movl $0x0, -0xbac(%rbp)
movslq -0xbac(%rbp), %rax
movq %rax, -0xc38(%rbp)
leaq -0x258(%rbp), %rdi
callq 0xf060
movq %rax, %rcx
movq -0xc38(%rbp), %rax
cmpq %rcx, %rax
jae 0x582bd
movq -0x18(%rbp), %rax
movq %rax, -0xc48(%rbp)
movslq -0xbac(%rbp), %rsi
leaq -0x258(%rbp), %rdi
callq 0xf090
movq %rax, -0xc40(%rbp)
jmp 0x580b8
movq -0xc40(%rbp), %rax
movsd 0x18(%rax), %xmm0
movsd %xmm0, -0xc58(%rbp)
movslq -0xbac(%rbp), %rsi
leaq -0x258(%rbp), %rdi
callq 0xf090
movq %rax, -0xc50(%rbp)
jmp 0x580e8
movq -0xc50(%rbp), %rax
movsd 0x20(%rax), %xmm0
movsd %xmm0, -0xc68(%rbp)
movslq -0xbac(%rbp), %rsi
leaq -0x258(%rbp), %rdi
callq 0xf090
movq %rax, -0xc60(%rbp)
jmp 0x58118
movsd -0xc68(%rbp), %xmm1
movsd -0xc58(%rbp), %xmm0
movq -0xc48(%rbp), %rsi
movq -0xc60(%rbp), %rax
movsd 0x28(%rax), %xmm2
leaq -0xbc8(%rbp), %rdi
callq 0x97170
jmp 0x58149
leaq -0x220(%rbp), %rax
movq %rax, -0xc78(%rbp)
movslq -0xbac(%rbp), %rsi
leaq -0x258(%rbp), %rdi
callq 0xf090
movq %rax, -0xc70(%rbp)
jmp 0x58173
movq -0xc78(%rbp), %rdi
movq -0xc70(%rbp), %rsi
addq $0x40, %rsi
callq 0x5480
movq %rax, -0xc80(%rbp)
jmp 0x58193
movq -0xc80(%rbp), %rdi
leaq 0x1a410d(%rip), %rsi    # 0x1fc2ae
callq 0x5540
movq %rax, -0xc88(%rbp)
jmp 0x581af
leaq -0xbc8(%rbp), %rdi
xorl %esi, %esi
callq 0xe9d70
movq %rax, -0xc90(%rbp)
jmp 0x581c6
movq -0xc88(%rbp), %rdi
movq -0xc90(%rbp), %rax
movsd (%rax), %xmm0
callq 0x5980
movq %rax, -0xc98(%rbp)
jmp 0x581e6
movq -0xc98(%rbp), %rdi
leaq 0x1a40ba(%rip), %rsi    # 0x1fc2ae
callq 0x5540
movq %rax, -0xca0(%rbp)
jmp 0x58202
leaq -0xbc8(%rbp), %rdi
movl $0x1, %esi
callq 0xe9d70
movq %rax, -0xca8(%rbp)
jmp 0x5821c
movq -0xca0(%rbp), %rdi
movq -0xca8(%rbp), %rax
movsd (%rax), %xmm0
callq 0x5980
movq %rax, -0xcb0(%rbp)
jmp 0x5823c
movq -0xcb0(%rbp), %rdi
leaq 0x1a4064(%rip), %rsi    # 0x1fc2ae
callq 0x5540
movq %rax, -0xcb8(%rbp)
jmp 0x58258
leaq -0xbc8(%rbp), %rdi
movl $0x2, %esi
callq 0xe9d70
movq %rax, -0xcc0(%rbp)
jmp 0x58272
movq -0xcb8(%rbp), %rdi
movq -0xcc0(%rbp), %rax
movsd (%rax), %xmm0
callq 0x5980
movq %rax, -0xcc8(%rbp)
jmp 0x58292
movq -0xcc8(%rbp), %rdi
leaq 0x1a1385(%rip), %rsi    # 0x1f9625
callq 0x5540
jmp 0x582a7
jmp 0x582a9
movl -0xbac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xbac(%rbp)
jmp 0x58064
leaq -0x258(%rbp), %rdi
callq 0x12310
jmp 0x582d9
leaq -0x258(%rbp), %rdi
callq 0x12310
jmp 0x5830f
leaq -0x230(%rbp), %rdi
callq 0x50a0
jmp 0x582e7
movb $0x1, -0x1(%rbp)
movl $0x1, -0x240(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x5150
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0xce0, %rsp            # imm = 0xCE0
popq %rbp
retq
leaq -0x230(%rbp), %rdi
callq 0x5150
movq -0x238(%rbp), %rdi
callq 0x58f0
nopw (%rax,%rax)