// File: Luthaf[P]zeopp/networkstorage.cc
// Function: add_2c_dummy_edges(ATOM_NETWORK*, ATOM_NETWORK*, std::vector<CONNECTION, std::allocator<CONNECTION>>*)
void add_2c_dummy_edges(ATOM_NETWORK *basic_cell, ATOM_NETWORK *full_cell, vector<CONNECTION> *two_way_connections) { //the vertices are already in place - now we must add the dummy edges
  bool verbose = false;
  if(verbose) printf("DEBUG: adding dummy edges to 2-c vertices to represent orthogonal point of reference for molecular alignment\n");
  vector<int> basic_IDs_examined;
  int num_two_way_connections = two_way_connections->size();
  int num_full_v = full_cell->vertices.size();
  for(int i=0; i<num_full_v; i++) {
    VERTEX v = full_cell->vertices.at(i);
    XYZ v_xyz = full_cell->abc_to_xyz_returning_XYZ(v.abc);
    int num_e = v.edges.size();
    if(num_e==2) { //i.e. if a 2-c vertex, we need to add a dummy orthogonal edge
      int basic_ID = full_cell->vertex_basic_indices.at(i);
      bool examined_already = false;
      int num_examined_already = basic_IDs_examined.size();
      int sym_op = full_cell->vertex_symmetry_operators.at(i);
      for(int ex=0; ex<num_examined_already && !examined_already; ex++) {
        if(basic_IDs_examined.at(ex)==basic_ID) examined_already = true;
      }
      if(!examined_already) { //only need to find the direction if this vertex is not a symmetry image of another
        basic_IDs_examined.push_back(basic_ID);
        if(sym_op!=0) { //double check that the symmetry operator is zero (no sym operator), as it should be
          printf("ERROR: found a 2-c vertex ID %d based on underlying 2-c vertex ID %d, which has not already been examined, but the symmetry operator is non-zero (%d)\n", i, basic_ID, sym_op);
          exit(EXIT_FAILURE);
        }
        //we need to know which two vertices (in the full cell) this 2-c vertex is connected to, so that we can look at their other edges and decide a direction
        int v1 = -1, v2 = -1;
        int e1 = -1, e2 = -1;
        for(int j=0; j<num_two_way_connections && (v1==-1 || v2==-1); j++) {
          CONNECTION c = two_way_connections->at(j);
          if(i==c.v1) {
            //this connection links i with something
            if(v1==-1) {v1 = c.v2; e1 = c.e2;} else if(v2==-1) {v2 = c.v2; e2 = c.e2;}
          } else if(i==c.v2) {
            //this connection links something with i
            if(v1==-1) {v1 = c.v1; e1 = c.e1;} else if(v2==-1) {v2 = c.v1; e2 = c.e1;}
          }
        }
        if(v1==-1 || v2==-1) { //failed to identify the two adjacent full cell vertices
          printf("ERROR: could not identify the two full cell vertices connected to 2-c vertex %d\n", i);
          exit(EXIT_FAILURE);
        }
        XYZ v1_xyz = full_cell->abc_to_xyz_returning_XYZ(full_cell->vertices.at(v1).abc);
        XYZ v2_xyz = full_cell->abc_to_xyz_returning_XYZ(full_cell->vertices.at(v2).abc);
if(verbose) printf("DEBUG: the two full vertices which define this 2c vertex are v1, id %d at %.3f %.3f %.3f, and v2, id %d at %.3f %.3f %.3f\n", v1, v1_xyz.x, v1_xyz.y, v1_xyz.z, v2, v2_xyz.x, v2_xyz.y, v2_xyz.z);
if(verbose) printf("DEBUG: v_xyz (2c vertex position) = %.3f %.3f %.3f\n", v_xyz.x, v_xyz.y, v_xyz.z);
        XYZ this_edge_vector = get_vector_from_to(v_xyz, v1_xyz);
        double this_edge_length = this_edge_vector.magnitude(); //already half of the original net's edge length
        //now, look at the edges of these two adjacent vertices until we find a pair that are neither parallel to the edges of this vertex, nor mutually parallel, and use them to identify an appropriate orthogonal direction
        bool non_parallel_direction_found = false;
        bool parallel_direction_found = false;
        XYZ dummy_edge_abc; dummy_edge_abc.x = 1001; dummy_edge_abc.y = 1001; dummy_edge_abc.z = 1001; //dummy data
        int num_edges_v1 = full_cell->vertices.at(v1).edges.size();
        int num_edges_v2 = full_cell->vertices.at(v2).edges.size();
        for(int j=0; j<num_edges_v1 && !non_parallel_direction_found; j++) {
          if(j!=e1) { //don't select the edge that connects to the 2-c vertex in question ...
            XYZ other_edge_1_end_abc = full_cell->vertices.at(v1).edges.at(j);
            XYZ other_edge_1_end_xyz = full_cell->abc_to_xyz_returning_XYZ(other_edge_1_end_abc);
            XYZ other_edge_1_vector = get_vector_from_to(v1_xyz, other_edge_1_end_xyz);
            //determine whether this edge points in a different direction, if it does, we can project the end point and use that direction as the reference
            double angle_between_degrees = 360.0*this_edge_vector.angle_between(other_edge_1_vector)/(2.0*PI);
            double acute_angle_between_degrees = min(angle_between_degrees, 180.0-angle_between_degrees);
if(verbose) printf("DEBUG: considering edge id %d of v1 which points to position %.3f %.3f %.3f (%.3f degrees angular difference)\n", j, other_edge_1_end_xyz.x, other_edge_1_end_xyz.y, other_edge_1_end_xyz.z, acute_angle_between_degrees);
            if(acute_angle_between_degrees>15.0) { //acceptable angle deviation
              XYZ other_edge_1_projection_xyz = project_onto_line(other_edge_1_end_xyz, v_xyz, v1_xyz);
              XYZ projection_1_vector_norm = get_vector_from_to(other_edge_1_end_xyz, other_edge_1_projection_xyz).unit();
if(verbose) printf("DEBUG: projection vector is from %.3f %.3f %.3f and norm is %.3f %.3f %.3f\n", other_edge_1_projection_xyz.x, other_edge_1_projection_xyz.y, other_edge_1_projection_xyz.z, projection_1_vector_norm.x, projection_1_vector_norm.y, projection_1_vector_norm.z);
              for(int k=0; k<num_edges_v2 && !non_parallel_direction_found; k++) {
                if(k!=e2) { //don't select the edge that connects to the 2-c vertex in question ...
                  XYZ other_edge_2_end_abc = full_cell->vertices.at(v2).edges.at(k);
                  XYZ other_edge_2_end_xyz = full_cell->abc_to_xyz_returning_XYZ(other_edge_2_end_abc);
                  XYZ other_edge_2_vector = get_vector_from_to(v2_xyz, other_edge_2_end_xyz);
                  //determine whether this edge points in a different direction, if it does, we can project the end point and use that direction as the reference
                  double angle_between_degrees = 360.0*this_edge_vector.angle_between(other_edge_2_vector)/(2.0*PI);
                  double acute_angle_between_degrees = min(angle_between_degrees, 180.0-angle_between_degrees);
if(verbose) printf("DEBUG: considering edge id %d of v2 which points to position %.3f %.3f %.3f (%.3f degrees angular difference)\n", k, other_edge_2_end_xyz.x, other_edge_2_end_xyz.y, other_edge_2_end_xyz.z, acute_angle_between_degrees);
                  if(acute_angle_between_degrees>15.0) { //acceptable angle deviation
                    //NOTE: need to set new v_xyz, and project using this and v2_xyz, otherwise we project onto the wrong line (this line may, by periodic boundary conditions, differ)
                    XYZ new_v_xyz = full_cell->abc_to_xyz_returning_XYZ(full_cell->vertices.at(v2).edges.at(e2));
if(verbose) printf("DEBUG: new_v_xyz (image of 'basic' 2c vertex) = %.3f %.3f %.3f\n", new_v_xyz.x, new_v_xyz.y, new_v_xyz.z);
                    XYZ other_edge_2_projection_xyz = project_onto_line(other_edge_2_end_xyz, new_v_xyz, v2_xyz);
                    XYZ projection_2_vector_norm = get_vector_from_to(other_edge_2_end_xyz, other_edge_2_projection_xyz).unit();
if(verbose) printf("DEBUG: projection vector is from %.3f %.3f %.3f and norm is %.3f %.3f %.3f\n", other_edge_2_projection_xyz.x, other_edge_2_projection_xyz.y, other_edge_2_projection_xyz.z, projection_2_vector_norm.x, projection_2_vector_norm.y, projection_2_vector_norm.z);
                    //at this point, we now have two normalised directions that are not parallel with the 2-c vertex's edges - but are they parallel with each other?
                    angle_between_degrees = 360.0*projection_1_vector_norm.angle_between(projection_2_vector_norm)/(2.0*PI);
                    acute_angle_between_degrees = min(angle_between_degrees, 180.0-angle_between_degrees);
                    if(acute_angle_between_degrees>15.0) { //acceptable angle deviation
                      //not parallel! easy case - find the midpoint vector, and reverse it
                      XYZ dummy_vector_norm = (projection_1_vector_norm+projection_2_vector_norm).unit();
                      XYZ dummy_edge_xyz = v_xyz+dummy_vector_norm.scale(this_edge_length);
                      dummy_edge_abc = full_cell->xyz_to_abc_returning_XYZ(dummy_edge_xyz);
if(verbose) printf("DEBUG: non-parallel combo found: %.3f %.3f %.3f and %.3f %.3f %.3f leading to %.3f %.3f %.3f - with edge length of %.3f and a vector position %.3f %.3f %.3f, the edge ends at %.3f %.3f %.3f (in abc, %.3f %.3f %.3f)\n", projection_1_vector_norm.x, projection_1_vector_norm.y, projection_1_vector_norm.z, projection_2_vector_norm.x, projection_2_vector_norm.y, projection_2_vector_norm.z, dummy_vector_norm.x, dummy_vector_norm.y, dummy_vector_norm.z, this_edge_length, v_xyz.x, v_xyz.y, v_xyz.z, dummy_edge_xyz.x, dummy_edge_xyz.y, dummy_edge_xyz.z, dummy_edge_abc.x, dummy_edge_abc.y, dummy_edge_abc.z);
                      non_parallel_direction_found = true;
                    } else if(!parallel_direction_found) {
                      //else parallel; harder case - take the cross product of either, say 1; save one of these only, in case we do not find a parallel one
                      XYZ dummy_vector_norm = (this_edge_vector.unit().cross(projection_1_vector_norm)).unit();
                      XYZ dummy_edge_xyz = v_xyz+dummy_vector_norm.scale(this_edge_length);
                      dummy_edge_abc = full_cell->xyz_to_abc_returning_XYZ(dummy_edge_xyz);
if(verbose) printf("DEBUG: parallel combo found: %.3f %.3f %.3f and %.3f %.3f %.3f leading to %.3f %.3f %.3f - with edge length of %.3f and a vector position %.3f %.3f %.3f, the edge ends at %.3f %.3f %.3f (in abc, %.3f %.3f %.3f)\n", projection_1_vector_norm.x, projection_1_vector_norm.y, projection_1_vector_norm.z, projection_2_vector_norm.x, projection_2_vector_norm.y, projection_2_vector_norm.z, dummy_vector_norm.x, dummy_vector_norm.y, dummy_vector_norm.z, this_edge_length, v_xyz.x, v_xyz.y, v_xyz.z, dummy_edge_xyz.x, dummy_edge_xyz.y, dummy_edge_xyz.z, dummy_edge_abc.x, dummy_edge_abc.y, dummy_edge_abc.z);
                      parallel_direction_found = true;
                    }
                  }
                }
              }
            }
          }
        }
        //at this point we know the selected direction, and can implement it
        if(dummy_edge_abc.x>1000 && dummy_edge_abc.y>1000 && dummy_edge_abc.z>1000) {
          printf("ERROR: could not find a candidate orthogonal direction with which to orient full cell 2-c vertex %d's dummy edge\n", i);
          exit(EXIT_FAILURE);
        } else if(verbose) {
          printf("DEBUG: orthogonal position abc chosen to be %.3f %.3f %.3f\n", dummy_edge_abc.x, dummy_edge_abc.y, dummy_edge_abc.z);
        }
        //so update the full cell vertex with the new data, and store the basic vertex info locally only
        full_cell->vertices.at(i).dummy_edges.push_back(dummy_edge_abc);
        basic_cell->vertices.at(basic_ID).dummy_edges.push_back(dummy_edge_abc);
      } else { //else this vertex is a symmetry image of another - in that case we can use this info to assign the orientation based on that of the underlying vertex
        XYZ test_dummy_e = basic_cell->vertices.at(basic_ID).dummy_edges.at(0);
        vector<XYZ> equiv_dummy_e = GetEquivalentPositions(basic_cell->sym_ID,&test_dummy_e);
/*
        XYZ here_uc = trans_to_origuc(v.abc);
        XYZ shift = here_uc - v.abc;
        full_cell->vertices.at(i).dummy_edges.push_back(equiv_dummy_e.at(sym_op)+shift); //this is nice - we know that we are working on symmetric vertex image with index j - so we can just keep the corresponding edge image - shifting it to unit cell by the same amount that we used for the vertex!
*/
        full_cell->vertices.at(i).dummy_edges.push_back(equiv_dummy_e.at(sym_op)); //this is nice - we know that we are working on symmetric vertex image with index j - so we can just keep the corresponding edge image - shifting it to unit cell by the same amount that we used for the vertex!
      }
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x810, %rsp            # imm = 0x810
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movb $0x0, -0x19(%rbp)
testb $0x1, -0x19(%rbp)
je 0xaa86f
leaq 0x14fbf5(%rip), %rdi    # 0x1fa45d
movb $0x0, %al
callq 0x5070
leaq -0x38(%rbp), %rdi
callq 0xd0d0
movq -0x18(%rbp), %rdi
callq 0xaf420
movl %eax, -0x3c(%rbp)
movq -0x10(%rbp), %rdi
addq $0x3c0, %rdi            # imm = 0x3C0
callq 0xae470
movl %eax, -0x40(%rbp)
movl $0x0, -0x44(%rbp)
movl -0x44(%rbp), %eax
cmpl -0x40(%rbp), %eax
jge 0xabd60
movq -0x10(%rbp), %rdi
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0x44(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x660(%rbp)
jmp 0xaa8c7
movq -0x660(%rbp), %rsi
leaq -0xb8(%rbp), %rdi
callq 0xae4e0
jmp 0xaa8dc
movq -0x10(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
leaq -0xb8(%rbp), %rdx
callq 0x97310
jmp 0xaa8f5
leaq -0xb8(%rbp), %rdi
addq $0x20, %rdi
callq 0xae590
movl %eax, -0xe4(%rbp)
cmpl $0x2, -0xe4(%rbp)
jne 0xabd38
movq -0x10(%rbp), %rdi
addq $0x408, %rdi            # imm = 0x408
movslq -0x44(%rbp), %rsi
callq 0x101d0
movq %rax, -0x668(%rbp)
jmp 0xaa935
movq -0x668(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xe8(%rbp)
movb $0x0, -0xe9(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x10090
movl %eax, -0xf0(%rbp)
movq -0x10(%rbp), %rdi
addq $0x420, %rdi            # imm = 0x420
movslq -0x44(%rbp), %rsi
callq 0x101d0
movq %rax, -0x670(%rbp)
jmp 0xaa977
movq -0x670(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xf4(%rbp)
movl $0x0, -0xf8(%rbp)
movl -0xf8(%rbp), %ecx
xorl %eax, %eax
cmpl -0xf0(%rbp), %ecx
movb %al, -0x671(%rbp)
jge 0xaa9b4
movb -0xe9(%rbp), %al
xorb $-0x1, %al
movb %al, -0x671(%rbp)
movb -0x671(%rbp), %al
testb $0x1, %al
jne 0xaa9c0
jmp 0xaaa37
movslq -0xf8(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x101d0
movq %rax, -0x680(%rbp)
jmp 0xaa9d9
movq -0x680(%rbp), %rax
movl (%rax), %eax
cmpl -0xe8(%rbp), %eax
jne 0xaaa21
movb $0x1, -0xe9(%rbp)
jmp 0xaaa21
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0xabd72
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0xabd52
jmp 0xaaa23
movl -0xf8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf8(%rbp)
jmp 0xaa990
testb $0x1, -0xe9(%rbp)
jne 0xabc30
leaq -0x38(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0xd1b0
jmp 0xaaa56
cmpl $0x0, -0xf4(%rbp)
je 0xaaa88
movl -0x44(%rbp), %esi
movl -0xe8(%rbp), %edx
movl -0xf4(%rbp), %ecx
leaq 0x14fa56(%rip), %rdi    # 0x1fa4cb
xorl %eax, %eax
callq 0x5070
jmp 0xaaa7e
movl $0x1, %edi
callq 0x67c0
movl $0xffffffff, -0xfc(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x100(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x104(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x108(%rbp) # imm = 0xFFFFFFFF
movl $0x0, -0x10c(%rbp)
movl -0x10c(%rbp), %ecx
xorl %eax, %eax
cmpl -0x3c(%rbp), %ecx
movb %al, -0x681(%rbp)
jge 0xaaafa
movb $0x1, %al
cmpl $-0x1, -0xfc(%rbp)
movb %al, -0x682(%rbp)
je 0xaaaee
cmpl $-0x1, -0x100(%rbp)
sete %al
movb %al, -0x682(%rbp)
movb -0x682(%rbp), %al
movb %al, -0x681(%rbp)
movb -0x681(%rbp), %al
testb $0x1, %al
jne 0xaab09
jmp 0xaac10
movq -0x18(%rbp), %rdi
movslq -0x10c(%rbp), %rsi
callq 0xaf0e0
movq %rax, -0x690(%rbp)
jmp 0xaab22
movq -0x690(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x128(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x120(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0x118(%rbp)
movl 0x18(%rax), %eax
movl %eax, -0x110(%rbp)
movl -0x44(%rbp), %eax
cmpl -0x128(%rbp), %eax
jne 0xaaba5
cmpl $-0x1, -0xfc(%rbp)
jne 0xaab80
movl -0x124(%rbp), %eax
movl %eax, -0xfc(%rbp)
movl -0x11c(%rbp), %eax
movl %eax, -0x104(%rbp)
jmp 0xaaba3
cmpl $-0x1, -0x100(%rbp)
jne 0xaaba1
movl -0x124(%rbp), %eax
movl %eax, -0x100(%rbp)
movl -0x11c(%rbp), %eax
movl %eax, -0x108(%rbp)
jmp 0xaaba3
jmp 0xaabfa
movl -0x44(%rbp), %eax
cmpl -0x124(%rbp), %eax
jne 0xaabf8
cmpl $-0x1, -0xfc(%rbp)
jne 0xaabd3
movl -0x128(%rbp), %eax
movl %eax, -0xfc(%rbp)
movl -0x120(%rbp), %eax
movl %eax, -0x104(%rbp)
jmp 0xaabf6
cmpl $-0x1, -0x100(%rbp)
jne 0xaabf4
movl -0x128(%rbp), %eax
movl %eax, -0x100(%rbp)
movl -0x120(%rbp), %eax
movl %eax, -0x108(%rbp)
jmp 0xaabf6
jmp 0xaabf8
jmp 0xaabfa
jmp 0xaabfc
movl -0x10c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10c(%rbp)
jmp 0xaaaba
cmpl $-0x1, -0xfc(%rbp)
je 0xaac22
cmpl $-0x1, -0x100(%rbp)
jne 0xaac3f
movl -0x44(%rbp), %esi
leaq 0x14f936(%rip), %rdi    # 0x1fa562
xorl %eax, %eax
callq 0x5070
jmp 0xaac35
movl $0x1, %edi
callq 0x67c0
movq -0x10(%rbp), %rdi
movq %rdi, -0x6a0(%rbp)
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0xfc(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x698(%rbp)
jmp 0xaac66
movq -0x698(%rbp), %rdx
movq -0x6a0(%rbp), %rsi
leaq -0x140(%rbp), %rdi
callq 0x97310
jmp 0xaac82
movq -0x10(%rbp), %rdi
movq %rdi, -0x6b0(%rbp)
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0x100(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x6a8(%rbp)
jmp 0xaaca9
movq -0x6a8(%rbp), %rdx
movq -0x6b0(%rbp), %rsi
leaq -0x158(%rbp), %rdi
callq 0x97310
jmp 0xaacc5
testb $0x1, -0x19(%rbp)
je 0xaad19
movl -0xfc(%rbp), %esi
movsd -0x140(%rbp), %xmm0
movsd -0x138(%rbp), %xmm1
movsd -0x130(%rbp), %xmm2
movl -0x100(%rbp), %edx
movsd -0x158(%rbp), %xmm3
movsd -0x150(%rbp), %xmm4
movsd -0x148(%rbp), %xmm5
leaq 0x14f8a5(%rip), %rdi    # 0x1fa5b3
movb $0x6, %al
callq 0x5070
jmp 0xaad17
jmp 0xaad19
testb $0x1, -0x19(%rbp)
je 0xaad49
movsd -0xe0(%rbp), %xmm0
movsd -0xd8(%rbp), %xmm1
movsd -0xd0(%rbp), %xmm2
leaq 0x14f8f0(%rip), %rdi    # 0x1fa62e
movb $0x3, %al
callq 0x5070
jmp 0xaad47
jmp 0xaad49
movq -0xd0(%rbp), %rax
movq %rax, -0x180(%rbp)
movups -0xe0(%rbp), %xmm0
movaps %xmm0, -0x190(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movups -0x140(%rbp), %xmm0
movaps %xmm0, -0x1b0(%rbp)
movq -0x1a0(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x28(%rax)
movaps -0x1b0(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x180(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x190(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x170(%rbp), %rdi
callq 0xeaf90
jmp 0xaadbd
leaq -0x170(%rbp), %rdi
callq 0xe9240
movsd %xmm0, -0x6b8(%rbp)
jmp 0xaadd3
movsd -0x6b8(%rbp), %xmm0
movsd %xmm0, -0x1b8(%rbp)
movb $0x0, -0x1b9(%rbp)
movb $0x0, -0x1ba(%rbp)
leaq -0x1d8(%rbp), %rdi
xorps %xmm2, %xmm2
movaps %xmm2, %xmm0
movaps %xmm2, %xmm1
callq 0xea8e0
jmp 0xaae08
movabsq $0x408f480000000000, %rax # imm = 0x408F480000000000
movq %rax, -0x1d8(%rbp)
movq %rax, -0x1d0(%rbp)
movq %rax, -0x1c8(%rbp)
movq -0x10(%rbp), %rdi
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0xfc(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x6c0(%rbp)
jmp 0xaae47
movq -0x6c0(%rbp), %rdi
addq $0x20, %rdi
callq 0xae590
movl %eax, -0x1dc(%rbp)
movq -0x10(%rbp), %rdi
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0x100(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x6c8(%rbp)
jmp 0xaae7d
movq -0x6c8(%rbp), %rdi
addq $0x20, %rdi
callq 0xae590
movl %eax, -0x1e0(%rbp)
movl $0x0, -0x1e4(%rbp)
movl -0x1e4(%rbp), %ecx
xorl %eax, %eax
cmpl -0x1dc(%rbp), %ecx
movb %al, -0x6c9(%rbp)
jge 0xaaec1
movb -0x1b9(%rbp), %al
xorb $-0x1, %al
movb %al, -0x6c9(%rbp)
movb -0x6c9(%rbp), %al
testb $0x1, %al
jne 0xaaed0
jmp 0xabb2b
movl -0x1e4(%rbp), %eax
cmpl -0x104(%rbp), %eax
je 0xabb15
movq -0x10(%rbp), %rdi
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0xfc(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x6d8(%rbp)
jmp 0xaaf02
movq -0x6d8(%rbp), %rdi
addq $0x20, %rdi
movslq -0x1e4(%rbp), %rsi
callq 0xae5c0
movq %rax, -0x6e0(%rbp)
jmp 0xaaf22
movq -0x6e0(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x1f0(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x200(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x218(%rbp), %rdi
leaq -0x200(%rbp), %rdx
callq 0x97310
jmp 0xaaf57
movq -0x130(%rbp), %rax
movq %rax, -0x240(%rbp)
movups -0x140(%rbp), %xmm0
movaps %xmm0, -0x250(%rbp)
movq -0x208(%rbp), %rax
movq %rax, -0x260(%rbp)
movups -0x218(%rbp), %xmm0
movaps %xmm0, -0x270(%rbp)
movq -0x260(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x28(%rax)
movaps -0x270(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x240(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x250(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x230(%rbp), %rdi
callq 0xeaf90
jmp 0xaafcb
leaq -0x170(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0xeac60
movsd %xmm0, -0x6e8(%rbp)
jmp 0xaafe8
movsd -0x6e8(%rbp), %xmm0
movsd 0x147aa0(%rip), %xmm1   # 0x1f2a98
mulsd %xmm1, %xmm0
movsd 0x147a9c(%rip), %xmm1   # 0x1f2aa0
divsd %xmm1, %xmm0
movsd %xmm0, -0x278(%rbp)
movsd -0x278(%rbp), %xmm1
movsd 0x14c890(%rip), %xmm0   # 0x1f78b0
subsd %xmm1, %xmm0
movsd %xmm0, -0x288(%rbp)
leaq -0x278(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x64f50
movq %rax, -0x6f0(%rbp)
jmp 0xab048
movq -0x6f0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x280(%rbp)
testb $0x1, -0x19(%rbp)
je 0xab099
movl -0x1e4(%rbp), %esi
movsd -0x218(%rbp), %xmm0
movsd -0x210(%rbp), %xmm1
movsd -0x208(%rbp), %xmm2
movsd -0x280(%rbp), %xmm3
leaq 0x14f5d4(%rip), %rdi    # 0x1fa662
movb $0x4, %al
callq 0x5070
jmp 0xab097
jmp 0xab099
movsd -0x280(%rbp), %xmm0
movsd 0x14c7cf(%rip), %xmm1   # 0x1f7878
ucomisd %xmm1, %xmm0
jbe 0xabb13
movq -0x208(%rbp), %rax
movq %rax, -0x2b0(%rbp)
movups -0x218(%rbp), %xmm0
movaps %xmm0, -0x2c0(%rbp)
movq -0xd0(%rbp), %rax
movq %rax, -0x2d0(%rbp)
movups -0xe0(%rbp), %xmm0
movaps %xmm0, -0x2e0(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0x2f0(%rbp)
movups -0x140(%rbp), %xmm0
movaps %xmm0, -0x300(%rbp)
movq -0x2f0(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x40(%rax)
movaps -0x300(%rbp), %xmm0
movups %xmm0, 0x30(%rax)
movq -0x2d0(%rbp), %rcx
movq %rcx, 0x28(%rax)
movaps -0x2e0(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x2b0(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x2c0(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x2a0(%rbp), %rdi
callq 0xeb000
jmp 0xab159
movq -0x208(%rbp), %rax
movq %rax, -0x340(%rbp)
movups -0x218(%rbp), %xmm0
movaps %xmm0, -0x350(%rbp)
movq -0x290(%rbp), %rax
movq %rax, -0x360(%rbp)
movups -0x2a0(%rbp), %xmm0
movaps %xmm0, -0x370(%rbp)
movq -0x360(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x28(%rax)
movaps -0x370(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x340(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x350(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x330(%rbp), %rdi
callq 0xeaf90
jmp 0xab1cd
leaq -0x318(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0xeaa90
jmp 0xab1e2
testb $0x1, -0x19(%rbp)
je 0xab22a
movsd -0x2a0(%rbp), %xmm0
movsd -0x298(%rbp), %xmm1
movsd -0x290(%rbp), %xmm2
movsd -0x318(%rbp), %xmm3
movsd -0x310(%rbp), %xmm4
movsd -0x308(%rbp), %xmm5
leaq 0x14f4b2(%rip), %rdi    # 0x1fa6d1
movb $0x6, %al
callq 0x5070
jmp 0xab228
jmp 0xab22a
movl $0x0, -0x374(%rbp)
movl -0x374(%rbp), %ecx
xorl %eax, %eax
cmpl -0x1e0(%rbp), %ecx
movb %al, -0x6f1(%rbp)
jge 0xab258
movb -0x1b9(%rbp), %al
xorb $-0x1, %al
movb %al, -0x6f1(%rbp)
movb -0x6f1(%rbp), %al
testb $0x1, %al
jne 0xab267
jmp 0xabb11
movl -0x374(%rbp), %eax
cmpl -0x108(%rbp), %eax
je 0xabafb
movq -0x10(%rbp), %rdi
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0x100(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x700(%rbp)
jmp 0xab299
movq -0x700(%rbp), %rdi
addq $0x20, %rdi
movslq -0x374(%rbp), %rsi
callq 0xae5c0
movq %rax, -0x708(%rbp)
jmp 0xab2b9
movq -0x708(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x380(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x390(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x3a8(%rbp), %rdi
leaq -0x390(%rbp), %rdx
callq 0x97310
jmp 0xab2ee
movq -0x148(%rbp), %rax
movq %rax, -0x3d0(%rbp)
movups -0x158(%rbp), %xmm0
movaps %xmm0, -0x3e0(%rbp)
movq -0x398(%rbp), %rax
movq %rax, -0x3f0(%rbp)
movups -0x3a8(%rbp), %xmm0
movaps %xmm0, -0x400(%rbp)
movq -0x3f0(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x28(%rax)
movaps -0x400(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x3d0(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x3e0(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x3c0(%rbp), %rdi
callq 0xeaf90
jmp 0xab362
leaq -0x170(%rbp), %rdi
leaq -0x3c0(%rbp), %rsi
callq 0xeac60
movsd %xmm0, -0x710(%rbp)
jmp 0xab37f
movsd -0x710(%rbp), %xmm0
movsd 0x147709(%rip), %xmm1   # 0x1f2a98
mulsd %xmm1, %xmm0
movsd 0x147705(%rip), %xmm1   # 0x1f2aa0
divsd %xmm1, %xmm0
movsd %xmm0, -0x408(%rbp)
movsd -0x408(%rbp), %xmm1
movsd 0x14c4f9(%rip), %xmm0   # 0x1f78b0
subsd %xmm1, %xmm0
movsd %xmm0, -0x418(%rbp)
leaq -0x408(%rbp), %rdi
leaq -0x418(%rbp), %rsi
callq 0x64f50
movq %rax, -0x718(%rbp)
jmp 0xab3df
movq -0x718(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x410(%rbp)
testb $0x1, -0x19(%rbp)
je 0xab430
movl -0x374(%rbp), %esi
movsd -0x3a8(%rbp), %xmm0
movsd -0x3a0(%rbp), %xmm1
movsd -0x398(%rbp), %xmm2
movsd -0x410(%rbp), %xmm3
leaq 0x14f2f8(%rip), %rdi    # 0x1fa71d
movb $0x4, %al
callq 0x5070
jmp 0xab42e
jmp 0xab430
movsd -0x410(%rbp), %xmm0
movsd 0x14c438(%rip), %xmm1   # 0x1f7878
ucomisd %xmm1, %xmm0
jbe 0xabaf9
movq -0x10(%rbp), %rdi
movq %rdi, -0x728(%rbp)
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0x100(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x720(%rbp)
jmp 0xab471
movq -0x720(%rbp), %rdi
addq $0x20, %rdi
movslq -0x108(%rbp), %rsi
callq 0xae5c0
movq %rax, -0x730(%rbp)
jmp 0xab491
movq -0x730(%rbp), %rdx
movq -0x728(%rbp), %rsi
leaq -0x430(%rbp), %rdi
callq 0x97310
jmp 0xab4ad
testb $0x1, -0x19(%rbp)
je 0xab4dd
movsd -0x430(%rbp), %xmm0
movsd -0x428(%rbp), %xmm1
movsd -0x420(%rbp), %xmm2
leaq 0x14f2ba(%rip), %rdi    # 0x1fa78c
movb $0x3, %al
callq 0x5070
jmp 0xab4db
jmp 0xab4dd
movq -0x398(%rbp), %rax
movq %rax, -0x450(%rbp)
movups -0x3a8(%rbp), %xmm0
movaps %xmm0, -0x460(%rbp)
movq -0x420(%rbp), %rax
movq %rax, -0x470(%rbp)
movups -0x430(%rbp), %xmm0
movaps %xmm0, -0x480(%rbp)
movq -0x148(%rbp), %rax
movq %rax, -0x490(%rbp)
movups -0x158(%rbp), %xmm0
movaps %xmm0, -0x4a0(%rbp)
movq -0x490(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x40(%rax)
movaps -0x4a0(%rbp), %xmm0
movups %xmm0, 0x30(%rax)
movq -0x470(%rbp), %rcx
movq %rcx, 0x28(%rax)
movaps -0x480(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x450(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x460(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x448(%rbp), %rdi
callq 0xeb000
jmp 0xab583
movq -0x398(%rbp), %rax
movq %rax, -0x4e0(%rbp)
movups -0x3a8(%rbp), %xmm0
movaps %xmm0, -0x4f0(%rbp)
movq -0x438(%rbp), %rax
movq %rax, -0x500(%rbp)
movups -0x448(%rbp), %xmm0
movaps %xmm0, -0x510(%rbp)
movq -0x500(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x28(%rax)
movaps -0x510(%rbp), %xmm0
movups %xmm0, 0x18(%rax)
movq -0x4e0(%rbp), %rcx
movq %rcx, 0x10(%rax)
movaps -0x4f0(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x4d0(%rbp), %rdi
callq 0xeaf90
jmp 0xab5f7
leaq -0x4b8(%rbp), %rdi
leaq -0x4d0(%rbp), %rsi
callq 0xeaa90
jmp 0xab60c
testb $0x1, -0x19(%rbp)
je 0xab654
movsd -0x448(%rbp), %xmm0
movsd -0x440(%rbp), %xmm1
movsd -0x438(%rbp), %xmm2
movsd -0x4b8(%rbp), %xmm3
movsd -0x4b0(%rbp), %xmm4
movsd -0x4a8(%rbp), %xmm5
leaq 0x14f088(%rip), %rdi    # 0x1fa6d1
movb $0x6, %al
callq 0x5070
jmp 0xab652
jmp 0xab654
leaq -0x318(%rbp), %rdi
leaq -0x4b8(%rbp), %rsi
callq 0xeac60
movsd %xmm0, -0x738(%rbp)
jmp 0xab671
movsd -0x738(%rbp), %xmm0
movsd 0x147417(%rip), %xmm1   # 0x1f2a98
mulsd %xmm1, %xmm0
movsd 0x147413(%rip), %xmm1   # 0x1f2aa0
divsd %xmm1, %xmm0
movsd %xmm0, -0x408(%rbp)
movsd -0x408(%rbp), %xmm1
movsd 0x14c207(%rip), %xmm0   # 0x1f78b0
subsd %xmm1, %xmm0
movsd %xmm0, -0x518(%rbp)
leaq -0x408(%rbp), %rdi
leaq -0x518(%rbp), %rsi
callq 0x64f50
movq %rax, -0x740(%rbp)
jmp 0xab6d1
movq -0x740(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x410(%rbp)
movsd -0x410(%rbp), %xmm0
movsd 0x14c184(%rip), %xmm1   # 0x1f7878
ucomisd %xmm1, %xmm0
jbe 0xab8eb
leaq -0x548(%rbp), %rdi
leaq -0x318(%rbp), %rsi
leaq -0x4b8(%rbp), %rdx
callq 0xeae50
jmp 0xab71a
leaq -0x530(%rbp), %rdi
leaq -0x548(%rbp), %rsi
callq 0xeaa90
jmp 0xab72f
movsd -0x1b8(%rbp), %xmm0
leaq -0x578(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0xea9f0
jmp 0xab74c
leaq -0x560(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
leaq -0x578(%rbp), %rdx
callq 0xeae50
jmp 0xab768
movq -0x10(%rbp), %rsi
leaq -0x590(%rbp), %rdi
leaq -0x560(%rbp), %rdx
callq 0x95a40
jmp 0xab781
movq -0x590(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq -0x588(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq -0x580(%rbp), %rax
movq %rax, -0x1c8(%rbp)
testb $0x1, -0x19(%rbp)
je 0xab8df
movsd -0x318(%rbp), %xmm0
movsd %xmm0, -0x748(%rbp)
movsd -0x310(%rbp), %xmm1
movsd -0x308(%rbp), %xmm2
movsd -0x4b8(%rbp), %xmm3
movsd -0x4b0(%rbp), %xmm4
movsd -0x4a8(%rbp), %xmm5
movsd -0x530(%rbp), %xmm6
movsd -0x528(%rbp), %xmm7
movsd -0x520(%rbp), %xmm8
movsd -0x1b8(%rbp), %xmm9
movsd -0xe0(%rbp), %xmm10
movsd -0xd8(%rbp), %xmm11
movsd -0xd0(%rbp), %xmm12
movsd -0x560(%rbp), %xmm13
movsd -0x558(%rbp), %xmm14
movsd -0x550(%rbp), %xmm15
movsd -0x1d8(%rbp), %xmm0
movsd %xmm0, -0x750(%rbp)
movsd -0x1d0(%rbp), %xmm0
movsd %xmm0, -0x758(%rbp)
movsd -0x1c8(%rbp), %xmm0
movq %rsp, %rax
movq %rax, -0x760(%rbp)
movsd %xmm0, 0x50(%rax)
movsd -0x758(%rbp), %xmm0
movsd %xmm0, 0x48(%rax)
movsd -0x750(%rbp), %xmm0
movsd %xmm0, 0x40(%rax)
movsd -0x748(%rbp), %xmm0
movsd %xmm15, 0x38(%rax)
movsd %xmm14, 0x30(%rax)
movsd %xmm13, 0x28(%rax)
movsd %xmm12, 0x20(%rax)
movsd %xmm11, 0x18(%rax)
movsd %xmm10, 0x10(%rax)
movsd %xmm9, 0x8(%rax)
movsd %xmm8, (%rax)
leaq 0x14eef8(%rip), %rdi    # 0x1fa7cc
movb $0x8, %al
callq 0x5070
jmp 0xab8dd
jmp 0xab8df
movb $0x1, -0x1b9(%rbp)
jmp 0xabaf7
testb $0x1, -0x1ba(%rbp)
jne 0xabaf5
leaq -0x5d8(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0xeaa90
jmp 0xab90d
leaq -0x5c0(%rbp), %rdi
leaq -0x5d8(%rbp), %rsi
leaq -0x318(%rbp), %rdx
callq 0xeab30
jmp 0xab929
leaq -0x5a8(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
callq 0xeaa90
jmp 0xab93e
movsd -0x1b8(%rbp), %xmm0
leaq -0x608(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
callq 0xea9f0
jmp 0xab95b
leaq -0x5f0(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
leaq -0x608(%rbp), %rdx
callq 0xeae50
jmp 0xab977
movq -0x10(%rbp), %rsi
leaq -0x620(%rbp), %rdi
leaq -0x5f0(%rbp), %rdx
callq 0x95a40
jmp 0xab990
movq -0x620(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq -0x618(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq -0x610(%rbp), %rax
movq %rax, -0x1c8(%rbp)
testb $0x1, -0x19(%rbp)
je 0xabaee
movsd -0x318(%rbp), %xmm0
movsd %xmm0, -0x768(%rbp)
movsd -0x310(%rbp), %xmm1
movsd -0x308(%rbp), %xmm2
movsd -0x4b8(%rbp), %xmm3
movsd -0x4b0(%rbp), %xmm4
movsd -0x4a8(%rbp), %xmm5
movsd -0x5a8(%rbp), %xmm6
movsd -0x5a0(%rbp), %xmm7
movsd -0x598(%rbp), %xmm8
movsd -0x1b8(%rbp), %xmm9
movsd -0xe0(%rbp), %xmm10
movsd -0xd8(%rbp), %xmm11
movsd -0xd0(%rbp), %xmm12
movsd -0x5f0(%rbp), %xmm13
movsd -0x5e8(%rbp), %xmm14
movsd -0x5e0(%rbp), %xmm15
movsd -0x1d8(%rbp), %xmm0
movsd %xmm0, -0x770(%rbp)
movsd -0x1d0(%rbp), %xmm0
movsd %xmm0, -0x778(%rbp)
movsd -0x1c8(%rbp), %xmm0
movq %rsp, %rax
movq %rax, -0x780(%rbp)
movsd %xmm0, 0x50(%rax)
movsd -0x778(%rbp), %xmm0
movsd %xmm0, 0x48(%rax)
movsd -0x770(%rbp), %xmm0
movsd %xmm0, 0x40(%rax)
movsd -0x768(%rbp), %xmm0
movsd %xmm15, 0x38(%rax)
movsd %xmm14, 0x30(%rax)
movsd %xmm13, 0x28(%rax)
movsd %xmm12, 0x20(%rax)
movsd %xmm11, 0x18(%rax)
movsd %xmm10, 0x10(%rax)
movsd %xmm9, 0x8(%rax)
movsd %xmm8, (%rax)
leaq 0x14edc1(%rip), %rdi    # 0x1fa8a4
movb $0x8, %al
callq 0x5070
jmp 0xabaec
jmp 0xabaee
movb $0x1, -0x1ba(%rbp)
jmp 0xabaf7
jmp 0xabaf9
jmp 0xabafb
jmp 0xabafd
movl -0x374(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x374(%rbp)
jmp 0xab234
jmp 0xabb13
jmp 0xabb15
jmp 0xabb17
movl -0x1e4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1e4(%rbp)
jmp 0xaae9d
movsd -0x1d8(%rbp), %xmm0
movsd 0x14bd6d(%rip), %xmm1   # 0x1f78a8
ucomisd %xmm1, %xmm0
jbe 0xabb8a
movsd -0x1d0(%rbp), %xmm0
movsd 0x14bd57(%rip), %xmm1   # 0x1f78a8
ucomisd %xmm1, %xmm0
jbe 0xabb8a
movsd -0x1c8(%rbp), %xmm0
movsd 0x14bd41(%rip), %xmm1   # 0x1f78a8
ucomisd %xmm1, %xmm0
jbe 0xabb8a
movl -0x44(%rbp), %esi
leaq 0x14ee01(%rip), %rdi    # 0x1fa978
xorl %eax, %eax
callq 0x5070
jmp 0xabb80
movl $0x1, %edi
callq 0x67c0
testb $0x1, -0x19(%rbp)
je 0xabbba
movsd -0x1d8(%rbp), %xmm0
movsd -0x1d0(%rbp), %xmm1
movsd -0x1c8(%rbp), %xmm2
leaq 0x14ee3b(%rip), %rdi    # 0x1fa9ea
movb $0x3, %al
callq 0x5070
jmp 0xabbb8
jmp 0xabbba
jmp 0xabbbc
movq -0x10(%rbp), %rdi
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0x44(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x788(%rbp)
jmp 0xabbd9
movq -0x788(%rbp), %rdi
addq $0x38, %rdi
leaq -0x1d8(%rbp), %rsi
callq 0xafc20
jmp 0xabbf2
movq -0x8(%rbp), %rdi
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0xe8(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x790(%rbp)
jmp 0xabc12
movq -0x790(%rbp), %rdi
addq $0x38, %rdi
leaq -0x1d8(%rbp), %rsi
callq 0xafc20
jmp 0xabc2b
jmp 0xabd36
movq -0x8(%rbp), %rdi
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0xe8(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x798(%rbp)
jmp 0xabc50
movq -0x798(%rbp), %rdi
addq $0x38, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xae5c0
movq %rax, -0x7a0(%rbp)
jmp 0xabc6d
movq -0x7a0(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x630(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x640(%rbp)
movq -0x8(%rbp), %rax
movl 0x438(%rax), %esi
leaq -0x658(%rbp), %rdi
leaq -0x640(%rbp), %rdx
callq 0x117c50
jmp 0xabca8
movq -0x10(%rbp), %rdi
addq $0x3c0, %rdi            # imm = 0x3C0
movslq -0x44(%rbp), %rsi
callq 0xae4a0
movq %rax, -0x7a8(%rbp)
jmp 0xabcc5
movq -0x7a8(%rbp), %rax
addq $0x38, %rax
movq %rax, -0x7b8(%rbp)
movslq -0xf4(%rbp), %rsi
leaq -0x658(%rbp), %rdi
callq 0xae5c0
movq %rax, -0x7b0(%rbp)
jmp 0xabcf3
movq -0x7b0(%rbp), %rsi
movq -0x7b8(%rbp), %rdi
callq 0xafc20
jmp 0xabd08
leaq -0x658(%rbp), %rdi
callq 0x12210
jmp 0xabd36
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x658(%rbp), %rdi
callq 0x12210
jmp 0xabd52
jmp 0xabd38
leaq -0xb8(%rbp), %rdi
callq 0x12650
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0xaa89e
leaq -0xb8(%rbp), %rdi
callq 0x12650
jmp 0xabd72
leaq -0x38(%rbp), %rdi
callq 0xec80
addq $0x810, %rsp            # imm = 0x810
popq %rbp
retq
leaq -0x38(%rbp), %rdi
callq 0xec80
movq -0xc0(%rbp), %rdi
callq 0x58f0
nopw (%rax,%rax)