// File: hzeller[P]gcode-multi-shell-extrude/multi-shell-extrude.cc
// Function: main
int main(int argc, char *argv[]) {
  ParamHeadline h1("Screw-data from template");
  StringParam fun_init    ("AABBBAABBBAABBB", "screw-template", 't', "Template string for screw.");
  FloatParam thread_depth (-1, "thread-depth", 'd',   "Depth of thread, initial-size/5 if negative");
  FloatParam twist        (0.0, "twist",        0,    "Twist ratio of angle per radius fraction (good -0.3..0.3)");

  ParamHeadline h2("Screw-data from polygon file");
  StringParam polygon_file("", "polygon-file", 'D',  "File describing polygon. Files with x y pairs");

  ParamHeadline h3("General Parameters");
  FloatParam total_height (-1,    "height", 'h', "Total height to be printed (must set)");
  FloatParam pitch        (30.0,  "pitch",  'p', "Millimeter height a full turn takes. "
                           "Negative for left-turning screw; 0 for straight hull.");
  FloatParam initial_size (10.0, "size",    's', "Polygon sizing parameter. Means radius if from "
                           "--screw-template, factor for --polygon-file");
  Vector2DParam center_offset(Vector2D(0.0, 0.0), "center-offset", 0, "Rotation-center offset into polygon.");
  BoolParam  auto_center(false, "auto-center", 0, "Automatically center around centroid.");
  FloatParam pump         (0.0,   "pump",    0, "Pump polygon as if the center was not a dot, but a circle of this radius");
  IntParam screw_count    (2,     "number", 'n', "Number of screws to be printed");
  FloatParam initial_shell(0,     "start-offset", 0, "Initial offset for first polygon");
  FloatParam shell_increment(1.2, "offset", 'R', "Offset increment between screws - the clearance");
  FloatParam lock_offset  (-1,    "lock-offset", 0, "EXPERIMENTAL offset to stop screw at end; Approx value: (offset - shell_thickness)/2 + 0.05");
  FloatParam brim(0, "brim", 0, "Add brim of this size on the bottom for better stability");
  FloatParam brim_spiral_factor(0.55, "brim-spiral-factor", 0,
                               "Distance between spirals in brim as factor of shell-thickness");
  FloatParam brim_smooth_radius(0, "brim-smooth-radius", 0, "Smoothing of brim connection to polygon to not get lost in inner details");
  BoolParam vessel(false, "vessel", 0, "Make a vessel with closed bottom");

  ParamHeadline h4("Quality");
  FloatParam layer_height (0.16,  "layer-height", 'l', "Height of each layer");
  FloatParam shell_thickness(0.8, "shell-thickness", 0, "Thickness of shell");
  FloatParam feed_mm_per_sec(100, "feed-rate",    'f', "maximum, in mm/s");
  FloatParam min_layer_time(3,    "layer-time",   'T', "Min time per layer; upper bound for feed-rate");
  FloatParam fan_on (0.3,  "fan-on-height", 0, "Height to switch on fan");
  FloatParam elephant_foot_multiplier (0.9,  "slender-elephant", 0, "Extrusion multiplier at first two layer heights to prevent elephant foot");
  FloatParam retract_amount (1.2, "retract", 0, "Millimeter of retract");
  FloatParam first_layer_feed_multiplier (0.7, "first-layer-speed", 0, "Feedrate multiplier for first layer");
  ParamHeadline h5("Printer Parameters");
  FloatParam nozzle_diameter(0.4, "nozzle-diameter", 0, "Diameter of extruder nozzle");
  FloatParam bed_temp(-1, "bed-temp", 0, "Bed temperature.");
  FloatParam temperature(190, "temperature", 0, "Extrusion temperature.");
  FloatParam temp_variation(0, "temperature-variation", 0, "Temperature variation around --temperature, e.g. to get dark lines in wood filament.");
  FloatParam filament_diameter(1.75, "filament-diameter", 0, "Diameter of filament");
  Vector2DParam machine_limit(Vector2D(150.0,150.0), "bed-size",    'L',  "x/y size limit of your printbed.");
  Vector2DParam head_offset(Vector2D(45.0,45.0),"head-offset", 'o', "dx/dy offset per print.");
  Vector2DParam edge_offset(Vector2D(5.0,5.0), "edge-offset",  0,  "Offset from the edge of the bed (bottom left origin).");

  // Output options
  ParamHeadline h6("Output Options");
  BoolParam do_postscript(false, "postscript", 'P', "PostScript output instead of GCode output");
  FloatParam postscript_thick_factor(1.0, "ps-thick-factor", 0, "Line thickness factor for shell size. Chooser smaller (e.g. 0.1) to better see overlaps");
  BoolParam matryoshka(false,    "nested",      0, "For PostScript: show nested (Matryoshka doll style)");

  if (!SetParametersFromCommandline(argc, argv)) {
    return ParameterUsage(argv[0]);
  }

  if (total_height < 0) {
    fprintf(stderr, "\n--height needs to be set\n\n");
    return ParameterUsage(argv[0]);
  }

  if (thread_depth < 0)
    thread_depth = initial_size / 5;

  if (matryoshka && !do_postscript) {
    fprintf(stderr, "Matryoshka mode only valid with postscript\n");
    return ParameterUsage(argv[0]);
  }

  // Calculated values from input parameters.
  const double nozzle_radius = nozzle_diameter / 2;
  const double filament_radius = filament_diameter / 2;
  const double shell_thickness_factor = shell_thickness / nozzle_diameter;

  matryoshka = matryoshka & do_postscript;   // Formulate it this way.

  // Get polygon we'll be working on; either from rotational input or file.
  Polygon input_polygon = (polygon_file.get().empty()
                           ? RotationalPolygon(fun_init.get().c_str(),
                                               initial_size,
                                               thread_depth, twist)
                           : ReadPolygon(polygon_file, initial_size));

  // Add pump if needed.
  if (pump > 0) {
    input_polygon = RadialPumpPolygon(input_polygon, pump);
  }

  if (auto_center) {
    center_offset = Centroid(input_polygon);
    center_offset = Vector2D(0,0) - center_offset;
  }

  // .. and offsetting
  if (center_offset->x != 0 || center_offset->y != 0) {
    input_polygon = OffsetCenter(input_polygon,
                                 center_offset->x, center_offset->y);
  }

  const Polygon base_polygon = input_polygon;
  if (base_polygon.empty()) {
    fprintf(stderr, "Polygon empty\n");
    return 1;
  }
  if (base_polygon.size() < 3) {
    fprintf(stderr, "Polygon is a %sgon :) Need at least 3 vertices.\n",
            base_polygon.size() == 1 ? "Mono" : "Duo");
    return 1;
  }

  // Determine limits
  if (matryoshka) {
    Polygon biggst_polygon
      = PolygonOffset(base_polygon,
                      initial_shell + (screw_count-1) * shell_increment);
    double max_radius = GetRadius(biggst_polygon) + brim;
    Vector2D poly_radius(max_radius + 5, max_radius + 5);
    machine_limit = poly_radius * 2;
    edge_offset = poly_radius;  // In matryoshka-case, edge_offset is center
  } else {
    const Vector2D max_machine = machine_limit - edge_offset;
    Vector2D pos = edge_offset;
    float radius = GetRadius(PolygonOffset(base_polygon, initial_shell));
    Vector2D screw_dimension(2 * (radius + brim), 2*(radius + brim));
    for (int i = 0; i < screw_count; ++i) {
      Vector2D new_pos = pos + screw_dimension;
      if (new_pos.x > max_machine.x || new_pos.y > max_machine.y) {
        fprintf(stderr, "With currently configured bedsize and printhead-offset, "
                "only %d screws fit (radius is %.1fmm)\n"
                "Configure your machine constraints with -L <x/y> -o < dx,dy> "
                "(currently -L %.0f,%.0f -o %.0f,%.0f)\n", i, radius,
                machine_limit->x, machine_limit->y,
                head_offset->x, head_offset->y);
        screw_count = i;
        break;
      }
      pos = new_pos + head_offset;
      screw_dimension = screw_dimension
        + Vector2D(shell_increment, shell_increment) * 2;
    }
    pos = pos - head_offset;
    // Now, pos is the largest corner. We can offset
    // the edge_offset now to the difference to center things.
    edge_offset = edge_offset + (max_machine - pos - edge_offset) / 2;
  }

  const double filament_extrusion_factor = shell_thickness_factor *
    (nozzle_radius * (layer_height/2)) / (filament_radius*filament_radius);

  Printer *printer = NULL;
  if (do_postscript) {
    total_height = std::min(total_height.get(),
                            3 * layer_height); // not needed more.
    // no move lines w/ Matryoshka
    printer = CreatePostscriptPrinter(!matryoshka,
                                      postscript_thick_factor * shell_thickness);
  } else {
    printer = CreateGCodePrinter(filament_extrusion_factor, retract_amount,
                                 temperature, bed_temp);
  }
  printer->Preamble(machine_limit, feed_mm_per_sec);

  printer->Comment("https://github.com/hzeller/gcode-multi-shell-extrude\n");
  printer->Comment("\n");
  printer->Comment(" ");
  for (int i = 0; i < argc; ++i)
    printf("%s ", argv[i]);
  printf("\n");
  printer->Comment("\n");
  if (!polygon_file.get().empty()) {
    printer->Comment("Polygon from polygon-file '%s'\n",
                     polygon_file.get().c_str());
    printer->Comment("size-factor=%.1f\n", initial_size.get());
  } else {
    printer->Comment("Polygon from screw template '%s'\n",
                     fun_init.get().c_str());
    printer->Comment("thread-depth=%.1fmm size=%.1fmm (radius)\n",
                     thread_depth.get(), initial_size.get());
  }
  printer->Comment("h=%.1fmm n=%d (shell-increment=%.1fmm)\n",
                   total_height.get(), screw_count.get(), shell_increment.get());
  printer->Comment("feed=%.1fmm/s (maximum; layer time at least %.1f s)\n",
                   feed_mm_per_sec.get(), min_layer_time.get());
  printer->Comment("pitch=%.1fmm/turn layer-height=%.3f\n",
                   pitch.get(), layer_height.get());
  printer->Comment("machine limits: bed: (%.0f/%.0f):  "
                  "head-offset: (%.0f,%.0f)\n",
                   machine_limit->x, machine_limit->y,
                   head_offset->x, head_offset->y);
  printer->Comment("----\n");

  printer->Init(machine_limit, feed_mm_per_sec);

  // How much the whole system should rotate per mm height.
  const double rotation_per_mm = (fabs(pitch) < 0.1) ? 0 : 1.0 / pitch;

  double total_time = 0;
  double total_travel = 0;

  constexpr float kHoverPos = 10.0;  // Hovering over screws while moving
  Vector2D center = edge_offset;
  printer->SetSpeed(feed_mm_per_sec);  // initial speed.
  for (int i = 0; i < screw_count; ++i) {
    const float current_offset = initial_shell + i * shell_increment;
    Polygon polygon = PolygonOffset(base_polygon, current_offset);
    if (polygon.size() == 0) {
      fprintf(stderr, "Polygon offset %.1f results in empty polygon\n",
              initial_shell + i * shell_increment);
      continue;
    }
    const double radius = GetRadius(polygon);
    Vector2D screw_radius(radius + brim, radius + brim);
    if (!matryoshka) {
      // We start here.
      center = center + screw_radius;
    }
    printer->MoveTo(center, i > 0 ? total_height + kHoverPos : kHoverPos);
    const float polygon_len = CalcPolygonLen(polygon);
    const float area = polygon_len * total_height * 2;  // inside and out.
    float layer_feedrate =  polygon_len / min_layer_time;
    layer_feedrate = std::min(layer_feedrate, feed_mm_per_sec.get());
    printer->ResetExtrude();
    printer->SetSpeed(layer_feedrate);
    printer->Comment("Screw #%d, polygon-offset=%.1f\n",
                     i+1, initial_shell + i * shell_increment);
    if (vessel) {
      const float spiral_layer_distance = shell_thickness * brim_spiral_factor;
      printer->Comment("Create vessel-bottom\n");
      printer->SetColor(0.5, 0, 0.5);
      CreateBottomPlate(polygon, printer, center,
                        0, -radius, spiral_layer_distance);
      // TODO: make this multi-layer.
      printer->GoZPos(2);
    }

    if (brim > 0) {
      const float spiral_layer_distance = shell_thickness * brim_spiral_factor;
      int layers = (int) ceil(brim / spiral_layer_distance);
      Polygon brim_polygon = polygon;
      if (brim_smooth_radius > 0)
        brim_polygon = PolygonOffset(PolygonOffset(polygon, brim_smooth_radius), -brim_smooth_radius);
      printer->Comment("Create brim\n");
      printer->SetColor(0, 0.5, 0);
      CreateBottomPlate(brim_polygon, printer, center,
                        layers * spiral_layer_distance, spiral_layer_distance/2,
                        spiral_layer_distance);
    }
    ExtrusionParams params = {
      .feedrate = layer_feedrate,
      .layer_height = layer_height,
      .total_height = total_height,
      .rotation_per_mm = rotation_per_mm,
      .lock_offset = lock_offset,
      .fan_on_height = fan_on,
      .elephant_foot_multiplier = elephant_foot_multiplier,
      .first_layer_feedrate_multiplier = first_layer_feed_multiplier,
      .base_temp = temperature,
      .temp_variation = temp_variation
    };

    CreateExtrusion(polygon, printer, center, params);
    const double travel = printer->GetExtrusionDistance();  // since last reset.
    total_travel += travel;
    total_time += travel / layer_feedrate;  // roughly (without acceleration)
    printer->SetSpeed(feed_mm_per_sec);
    printer->Retract();
    printer->GoZPos(total_height + kHoverPos);
    if (!matryoshka) {
      center = center + screw_radius + head_offset;
    }
    if (!do_postscript) {
      fprintf(stderr, "Screw-surface (out+in) for offset %.1f: ~%.1f cm²\n",
              current_offset, area / 100);
    }
  }

  printer->Postamble();
  if (!do_postscript) {  // doesn't make sense to print for PostScript
    int t = (int)total_time;
    const int hours = t / 3600;
    t %= 3600;
    const int minutes = t / 60;
    const int seconds = t % 60;
    fprintf(stderr, "Total time >= %02d:%02d:%02d; %.2fm filament\n", hours,
            minutes, seconds, total_travel * filament_extrusion_factor / 1000);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1280, %rsp           # imm = 0x1280
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq 0x273da(%rip), %rsi     # 0x2b14a
leaq -0x30(%rbp), %rdi
callq 0x86e0
leaq -0x91(%rbp), %rdi
movq %rdi, -0xaf0(%rbp)
callq 0x3450
movq -0xaf0(%rbp), %rdx
leaq 0x273c9(%rip), %rsi     # 0x2b163
leaq -0x90(%rbp), %rdi
callq 0x8720
jmp 0x3da8
leaq 0x273c4(%rip), %rdx     # 0x2b173
leaq 0x273cc(%rip), %r8      # 0x2b182
leaq -0x70(%rbp), %rdi
leaq -0x90(%rbp), %rsi
movl $0x74, %ecx
callq 0x87d0
jmp 0x3dcd
leaq -0x90(%rbp), %rdi
callq 0x3180
leaq -0x91(%rbp), %rdi
callq 0x32e0
leaq 0x273b1(%rip), %rsi     # 0x2b19d
leaq 0x273b7(%rip), %rcx     # 0x2b1aa
leaq -0xd0(%rbp), %rdi
movss 0x2726e(%rip), %xmm0    # 0x2b070
movl $0x64, %edx
callq 0x8850
jmp 0x3e0e
leaq 0x273c1(%rip), %rsi     # 0x2b1d6
leaq 0x273c0(%rip), %rcx     # 0x2b1dc
leaq -0xf8(%rbp), %rdi
xorps %xmm0, %xmm0
xorl %edx, %edx
callq 0x8850
jmp 0x3e2f
leaq 0x273e0(%rip), %rsi     # 0x2b216
leaq -0x118(%rbp), %rdi
callq 0x86e0
jmp 0x3e44
leaq -0x179(%rbp), %rdi
movq %rdi, -0xaf8(%rbp)
callq 0x3450
movq -0xaf8(%rbp), %rdx
leaq 0x281a5(%rip), %rsi     # 0x2c00a
leaq -0x178(%rbp), %rdi
callq 0x8720
jmp 0x3e73
leaq 0x274cf(%rip), %rdx     # 0x2b349
leaq 0x273b2(%rip), %r8      # 0x2b233
leaq -0x158(%rbp), %rdi
leaq -0x178(%rbp), %rsi
movl $0x44, %ecx
callq 0x87d0
jmp 0x3e9b
leaq -0x178(%rbp), %rdi
callq 0x3180
leaq -0x179(%rbp), %rdi
callq 0x32e0
leaq 0x273a7(%rip), %rsi     # 0x2b261
leaq -0x1a0(%rbp), %rdi
callq 0x86e0
jmp 0x3ec8
leaq 0x277c7(%rip), %rsi     # 0x2b696
leaq 0x2739e(%rip), %rcx     # 0x2b274
leaq -0x1c8(%rbp), %rdi
movss 0x2718b(%rip), %xmm0    # 0x2b070
movl $0x68, %edx
callq 0x8850
jmp 0x3ef1
leaq 0x273a2(%rip), %rsi     # 0x2b29a
leaq 0x273a1(%rip), %rcx     # 0x2b2a0
leaq -0x1f0(%rbp), %rdi
movss 0x27166(%rip), %xmm0    # 0x2b074
movl $0x70, %edx
callq 0x8850
jmp 0x3f1a
leaq 0x2794c(%rip), %rsi     # 0x2b86d
leaq 0x273d3(%rip), %rcx     # 0x2b2fb
leaq -0x218(%rbp), %rdi
movss 0x27141(%rip), %xmm0    # 0x2b078
movl $0x73, %edx
callq 0x8850
jmp 0x3f43
leaq -0x258(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x8470
jmp 0x3f57
movsd -0x258(%rbp), %xmm0
movsd -0x250(%rbp), %xmm1
leaq 0x273e8(%rip), %rsi     # 0x2b356
leaq 0x273ef(%rip), %rcx     # 0x2b364
leaq -0x248(%rbp), %rdi
xorl %edx, %edx
callq 0x88b0
jmp 0x3f85
leaq 0x273fd(%rip), %rdx     # 0x2b389
leaq 0x27402(%rip), %r8      # 0x2b395
leaq -0x280(%rbp), %rdi
xorl %ecx, %ecx
movl %ecx, %esi
callq 0x8920
jmp 0x3fa5
leaq 0x2740f(%rip), %rsi     # 0x2b3bb
leaq 0x2740d(%rip), %rcx     # 0x2b3c0
leaq -0x2a8(%rbp), %rdi
xorps %xmm0, %xmm0
xorl %edx, %edx
callq 0x8850
jmp 0x3fc6
leaq 0x2743c(%rip), %rdx     # 0x2b409
leaq 0x2743c(%rip), %r8      # 0x2b410
leaq -0x2d0(%rbp), %rdi
movl $0x2, %esi
movl $0x6e, %ecx
callq 0x8980
jmp 0x3fec
leaq 0x2743c(%rip), %rsi     # 0x2b42f
leaq 0x27442(%rip), %rcx     # 0x2b43c
leaq -0x2f8(%rbp), %rdi
xorps %xmm0, %xmm0
xorl %edx, %edx
callq 0x8850
jmp 0x400d
leaq 0x27884(%rip), %rsi     # 0x2b898
leaq 0x27442(%rip), %rcx     # 0x2b45d
leaq -0x320(%rbp), %rdi
movss 0x27052(%rip), %xmm0    # 0x2b07c
movl $0x52, %edx
callq 0x8850
jmp 0x4036
leaq 0x27450(%rip), %rsi     # 0x2b48d
leaq 0x27455(%rip), %rcx     # 0x2b499
leaq -0x348(%rbp), %rdi
movss 0x2701d(%rip), %xmm0    # 0x2b070
xorl %edx, %edx
callq 0x8850
jmp 0x405c
leaq 0x27492(%rip), %rsi     # 0x2b4f5
leaq 0x27490(%rip), %rcx     # 0x2b4fa
leaq -0x370(%rbp), %rdi
xorps %xmm0, %xmm0
xorl %edx, %edx
callq 0x8850
jmp 0x407d
leaq 0x274af(%rip), %rsi     # 0x2b533
leaq 0x274bb(%rip), %rcx     # 0x2b546
leaq -0x398(%rbp), %rdi
movss 0x26fe6(%rip), %xmm0    # 0x2b080
xorl %edx, %edx
callq 0x8850
jmp 0x40a3
leaq 0x274da(%rip), %rsi     # 0x2b584
leaq 0x274e6(%rip), %rcx     # 0x2b597
leaq -0x3c0(%rbp), %rdi
xorps %xmm0, %xmm0
xorl %edx, %edx
callq 0x8850
jmp 0x40c4
leaq 0x27515(%rip), %rdx     # 0x2b5e0
leaq 0x27515(%rip), %r8      # 0x2b5e7
leaq -0x3e8(%rbp), %rdi
xorl %ecx, %ecx
movl %ecx, %esi
callq 0x8920
jmp 0x40e4
leaq 0x2751d(%rip), %rsi     # 0x2b608
leaq -0x408(%rbp), %rdi
callq 0x86e0
jmp 0x40f9
leaq 0x27510(%rip), %rsi     # 0x2b610
leaq 0x27516(%rip), %rcx     # 0x2b61d
leaq -0x430(%rbp), %rdi
movss 0x26f6e(%rip), %xmm0    # 0x2b084
movl $0x6c, %edx
callq 0x8850
jmp 0x4122
leaq 0x2744b(%rip), %rsi     # 0x2b574
leaq 0x27502(%rip), %rcx     # 0x2b632
leaq -0x458(%rbp), %rdi
movss 0x26f49(%rip), %xmm0    # 0x2b088
xorl %edx, %edx
callq 0x8850
jmp 0x4148
leaq 0x27536(%rip), %rsi     # 0x2b685
leaq 0x274ef(%rip), %rcx     # 0x2b645
leaq -0x480(%rbp), %rdi
movss 0x26f27(%rip), %xmm0    # 0x2b08c
movl $0x66, %edx
callq 0x8850
jmp 0x4171
leaq 0x274de(%rip), %rsi     # 0x2b656
leaq 0x274e2(%rip), %rcx     # 0x2b661
leaq -0x4a8(%rbp), %rdi
movss 0x26f02(%rip), %xmm0    # 0x2b090
movl $0x54, %edx
callq 0x8850
jmp 0x419a
leaq 0x274ee(%rip), %rsi     # 0x2b68f
leaq 0x274f5(%rip), %rcx     # 0x2b69d
leaq -0x4d0(%rbp), %rdi
movss 0x26edd(%rip), %xmm0    # 0x2b094
xorl %edx, %edx
callq 0x8850
jmp 0x41c0
leaq 0x274ee(%rip), %rsi     # 0x2b6b5
leaq 0x274f8(%rip), %rcx     # 0x2b6c6
leaq -0x4f8(%rbp), %rdi
movss 0x26ebb(%rip), %xmm0    # 0x2b098
xorl %edx, %edx
callq 0x8850
jmp 0x41e6
leaq 0x27530(%rip), %rsi     # 0x2b71d
leaq 0x2751b(%rip), %rcx     # 0x2b70f
leaq -0x520(%rbp), %rdi
movss 0x26e79(%rip), %xmm0    # 0x2b07c
xorl %edx, %edx
callq 0x8850
jmp 0x420c
leaq 0x27512(%rip), %rsi     # 0x2b725
leaq 0x2751d(%rip), %rcx     # 0x2b737
leaq -0x548(%rbp), %rdi
movss 0x26e73(%rip), %xmm0    # 0x2b09c
xorl %edx, %edx
callq 0x8850
jmp 0x4232
leaq 0x27522(%rip), %rsi     # 0x2b75b
leaq -0x568(%rbp), %rdi
callq 0x86e0
jmp 0x4247
leaq 0x27520(%rip), %rsi     # 0x2b76e
leaq 0x27529(%rip), %rcx     # 0x2b77e
leaq -0x590(%rbp), %rdi
movss 0x26e3c(%rip), %xmm0    # 0x2b0a0
xorl %edx, %edx
callq 0x8850
jmp 0x426d
leaq 0x27526(%rip), %rsi     # 0x2b79a
leaq 0x27528(%rip), %rcx     # 0x2b7a3
leaq -0x5b8(%rbp), %rdi
movss 0x26de6(%rip), %xmm0    # 0x2b070
xorl %edx, %edx
callq 0x8850
jmp 0x4293
leaq 0x2751a(%rip), %rsi     # 0x2b7b4
leaq 0x2751f(%rip), %rcx     # 0x2b7c0
leaq -0x5e0(%rbp), %rdi
movss 0x26df4(%rip), %xmm0    # 0x2b0a4
xorl %edx, %edx
callq 0x8850
jmp 0x42b9
leaq 0x27517(%rip), %rsi     # 0x2b7d7
leaq 0x27526(%rip), %rcx     # 0x2b7ed
leaq -0x608(%rbp), %rdi
xorps %xmm0, %xmm0
xorl %edx, %edx
callq 0x8850
jmp 0x42da
leaq 0x27561(%rip), %rsi     # 0x2b842
leaq 0x2756c(%rip), %rcx     # 0x2b854
leaq -0x630(%rbp), %rdi
movss 0x26db1(%rip), %xmm0    # 0x2b0a8
xorl %edx, %edx
callq 0x8850
jmp 0x4300
leaq -0x670(%rbp), %rdi
movsd 0x26d01(%rip), %xmm1    # 0x2b010
movaps %xmm1, %xmm0
callq 0x8470
jmp 0x4319
movsd -0x670(%rbp), %xmm0
movsd -0x668(%rbp), %xmm1
leaq 0x27539(%rip), %rsi     # 0x2b869
leaq 0x2753b(%rip), %rcx     # 0x2b872
leaq -0x660(%rbp), %rdi
movl $0x4c, %edx
callq 0x88b0
jmp 0x434a
leaq -0x6b0(%rbp), %rdi
movsd 0x26cbf(%rip), %xmm1    # 0x2b018
movaps %xmm1, %xmm0
callq 0x8470
jmp 0x4363
movsd -0x6b0(%rbp), %xmm0
movsd -0x6a8(%rbp), %xmm1
leaq 0x27519(%rip), %rsi     # 0x2b893
leaq 0x2751e(%rip), %rcx     # 0x2b89f
leaq -0x6a0(%rbp), %rdi
movl $0x6f, %edx
callq 0x88b0
jmp 0x4394
leaq -0x6f0(%rbp), %rdi
movsd 0x26c7d(%rip), %xmm1    # 0x2b020
movaps %xmm1, %xmm0
callq 0x8470
jmp 0x43ad
movsd -0x6f0(%rbp), %xmm0
movsd -0x6e8(%rbp), %xmm1
leaq 0x274f3(%rip), %rsi     # 0x2b8b7
leaq 0x274f8(%rip), %rcx     # 0x2b8c3
leaq -0x6e0(%rbp), %rdi
xorl %edx, %edx
callq 0x88b0
jmp 0x43db
leaq 0x27517(%rip), %rsi     # 0x2b8f9
leaq -0x710(%rbp), %rdi
callq 0x86e0
jmp 0x43f0
leaq 0x27511(%rip), %rdx     # 0x2b908
leaq 0x27515(%rip), %r8      # 0x2b913
leaq -0x738(%rbp), %rdi
xorl %esi, %esi
movl $0x50, %ecx
callq 0x8920
jmp 0x4413
leaq 0x27523(%rip), %rsi     # 0x2b93d
leaq 0x2752c(%rip), %rcx     # 0x2b94d
leaq -0x760(%rbp), %rdi
movss 0x26c7c(%rip), %xmm0    # 0x2b0ac
xorl %edx, %edx
callq 0x8850
jmp 0x4439
leaq 0x27565(%rip), %rdx     # 0x2b9a5
leaq 0x27565(%rip), %r8      # 0x2b9ac
leaq -0x788(%rbp), %rdi
xorl %ecx, %ecx
movl %ecx, %esi
callq 0x8920
jmp 0x4459
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0xfc60
movb %al, -0xaf9(%rbp)
jmp 0x446d
movb -0xaf9(%rbp), %al
testb $0x1, %al
jne 0x48de
jmp 0x447d
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0xfa10
movl %eax, -0xb00(%rbp)
jmp 0x4491
movl -0xb00(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x78c(%rbp)
jmp 0x7120
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x44db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x3180
leaq -0x91(%rbp), %rdi
callq 0x32e0
jmp 0x7537
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x752e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7522
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7516
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x4563
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x3180
leaq -0x179(%rbp), %rdi
callq 0x32e0
jmp 0x750a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x74fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x74f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x74e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x74da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x74ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x74c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x74b6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x74aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x749e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7492
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7486
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x747a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x746e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7462
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7456
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x744a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x743e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7432
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7426
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x741a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x740e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7402
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x73f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x73ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x73de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x73d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x73c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x73ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x73ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x73a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7396
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x738a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x737e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7372
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7366
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x735a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x734e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7342
leaq -0x1c8(%rbp), %rdi
callq 0x89e0
movq %rax, -0xb08(%rbp)
jmp 0x48f3
movq -0xb08(%rbp), %rax
xorps %xmm0, %xmm0
ucomiss (%rax), %xmm0
jbe 0x4946
movq 0x366cf(%rip), %rax     # 0x3afd8
movq (%rax), %rdi
leaq 0x270cd(%rip), %rsi     # 0x2b9e0
xorl %eax, %eax
callq 0x3390
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0xfa10
movl %eax, -0xb0c(%rbp)
jmp 0x492e
movl -0xb0c(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x78c(%rbp)
jmp 0x7120
leaq -0xd0(%rbp), %rdi
callq 0x89e0
movq %rax, -0xb18(%rbp)
jmp 0x495b
movq -0xb18(%rbp), %rax
xorps %xmm0, %xmm0
ucomiss (%rax), %xmm0
jbe 0x49b5
leaq -0x218(%rbp), %rdi
callq 0x89e0
movq %rax, -0xb20(%rbp)
jmp 0x497f
movq -0xb20(%rbp), %rax
movss (%rax), %xmm0
movss 0x2671e(%rip), %xmm1    # 0x2b0b0
divss %xmm1, %xmm0
movss %xmm0, -0x790(%rbp)
leaq -0xd0(%rbp), %rdi
leaq -0x790(%rbp), %rsi
callq 0x8a00
jmp 0x49b3
jmp 0x49b5
leaq -0x788(%rbp), %rdi
callq 0x8a20
movq %rax, -0xb28(%rbp)
jmp 0x49ca
movq -0xb28(%rbp), %rax
testb $0x1, (%rax)
je 0x4a3b
leaq -0x738(%rbp), %rdi
callq 0x8a20
movq %rax, -0xb30(%rbp)
jmp 0x49eb
movq -0xb30(%rbp), %rax
testb $0x1, (%rax)
jne 0x4a3b
movq 0x365da(%rip), %rax     # 0x3afd8
movq (%rax), %rdi
leaq 0x26ff4(%rip), %rsi     # 0x2b9fc
xorl %eax, %eax
callq 0x3390
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0xfa10
movl %eax, -0xb34(%rbp)
jmp 0x4a23
movl -0xb34(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x78c(%rbp)
jmp 0x7120
leaq -0x590(%rbp), %rdi
callq 0x89e0
movq %rax, -0xb40(%rbp)
jmp 0x4a50
movq -0xb40(%rbp), %rax
movss (%rax), %xmm0
movss 0x26651(%rip), %xmm1    # 0x2b0b4
mulss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x798(%rbp)
leaq -0x630(%rbp), %rdi
callq 0x89e0
movq %rax, -0xb48(%rbp)
jmp 0x4a88
movq -0xb48(%rbp), %rax
movss (%rax), %xmm0
movss 0x26619(%rip), %xmm1    # 0x2b0b4
mulss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x7a0(%rbp)
leaq -0x458(%rbp), %rdi
callq 0x89e0
movq %rax, -0xb50(%rbp)
jmp 0x4ac0
movq -0xb50(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0xb5c(%rbp)
leaq -0x590(%rbp), %rdi
callq 0x89e0
movq %rax, -0xb58(%rbp)
jmp 0x4ae8
movss -0xb5c(%rbp), %xmm0
movq -0xb58(%rbp), %rax
movss (%rax), %xmm1
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x7a8(%rbp)
leaq -0x788(%rbp), %rdi
callq 0x8a20
movq %rax, -0xb68(%rbp)
jmp 0x4b20
movq -0xb68(%rbp), %rax
movzbl (%rax), %eax
andl $0x1, %eax
movl %eax, -0xb74(%rbp)
leaq -0x738(%rbp), %rdi
callq 0x8a20
movq %rax, -0xb70(%rbp)
jmp 0x4b48
movl -0xb74(%rbp), %ecx
movq -0xb70(%rbp), %rax
movzbl (%rax), %eax
andl %ecx, %eax
andb $0x1, %al
movb %al, -0x7a9(%rbp)
leaq -0x788(%rbp), %rdi
leaq -0x7a9(%rbp), %rsi
callq 0x8a40
jmp 0x4b77
leaq -0x158(%rbp), %rdi
callq 0x8a60
movq %rax, -0xb80(%rbp)
jmp 0x4b8c
movq -0xb80(%rbp), %rdi
callq 0x3420
testb $0x1, %al
jne 0x4ba1
jmp 0x4c69
leaq -0x70(%rbp), %rdi
callq 0x8a60
movq %rax, -0xb88(%rbp)
jmp 0x4bb3
movq -0xb88(%rbp), %rdi
callq 0x30e0
movq %rax, -0xb98(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x89e0
movq %rax, -0xb90(%rbp)
jmp 0x4bdb
movq -0xb90(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xba8(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x89e0
movq %rax, -0xba0(%rbp)
jmp 0x4c07
movq -0xba0(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xbb8(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x89e0
movq %rax, -0xbb0(%rbp)
jmp 0x4c33
movsd -0xbb8(%rbp), %xmm1
movsd -0xba8(%rbp), %xmm0
movq -0xb98(%rbp), %rsi
movq -0xbb0(%rbp), %rax
movss (%rax), %xmm2
cvtss2sd %xmm2, %xmm2
leaq -0x7c8(%rbp), %rdi
callq 0xb030
jmp 0x4c67
jmp 0x4cb9
leaq -0x158(%rbp), %rdi
callq 0x8a80
movq %rax, -0xbc0(%rbp)
jmp 0x4c7e
leaq -0x218(%rbp), %rdi
callq 0x89e0
movq %rax, -0xbc8(%rbp)
jmp 0x4c93
movq -0xbc0(%rbp), %rsi
movq -0xbc8(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
leaq -0x7c8(%rbp), %rdi
callq 0x3840
jmp 0x4cb7
jmp 0x4cb9
leaq -0x2a8(%rbp), %rdi
callq 0x89e0
movq %rax, -0xbd0(%rbp)
jmp 0x4cce
movq -0xbd0(%rbp), %rax
movss (%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x4d52
leaq -0x2a8(%rbp), %rdi
callq 0x89e0
movq %rax, -0xbd8(%rbp)
jmp 0x4cf6
movq -0xbd8(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
leaq -0x7e0(%rbp), %rdi
leaq -0x7c8(%rbp), %rsi
callq 0x3b40
jmp 0x4d1a
leaq -0x7c8(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
callq 0x8aa0
leaq -0x7e0(%rbp), %rdi
callq 0x84c0
jmp 0x4d52
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7336
leaq -0x280(%rbp), %rdi
callq 0x8a20
movq %rax, -0xbe0(%rbp)
jmp 0x4d67
movq -0xbe0(%rbp), %rax
testb $0x1, (%rax)
je 0x4e4f
leaq -0x7c8(%rbp), %rdi
callq 0x10a00
movsd %xmm1, -0xbf0(%rbp)
movsd %xmm0, -0xbe8(%rbp)
jmp 0x4d95
movsd -0xbf0(%rbp), %xmm0
movsd -0xbe8(%rbp), %xmm1
movsd %xmm1, -0x7f0(%rbp)
movsd %xmm0, -0x7e8(%rbp)
leaq -0x248(%rbp), %rdi
leaq -0x7f0(%rbp), %rsi
callq 0x8ad0
jmp 0x4dca
leaq -0x810(%rbp), %rdi
xorps %xmm1, %xmm1
movaps %xmm1, %xmm0
callq 0x8470
jmp 0x4dde
leaq -0x248(%rbp), %rdi
callq 0x8b50
movq %rax, -0xbf8(%rbp)
jmp 0x4df3
movq -0xbf8(%rbp), %rsi
leaq -0x810(%rbp), %rdi
callq 0x8b00
movsd %xmm1, -0xc08(%rbp)
movsd %xmm0, -0xc00(%rbp)
jmp 0x4e18
movsd -0xc08(%rbp), %xmm0
movsd -0xc00(%rbp), %xmm1
movsd %xmm1, -0x800(%rbp)
movsd %xmm0, -0x7f8(%rbp)
leaq -0x248(%rbp), %rdi
leaq -0x800(%rbp), %rsi
callq 0x8ad0
jmp 0x4e4d
jmp 0x4e4f
leaq -0x248(%rbp), %rdi
callq 0x8b70
movq %rax, -0xc10(%rbp)
jmp 0x4e64
movq -0xc10(%rbp), %rax
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x4eab
jp 0x4eab
leaq -0x248(%rbp), %rdi
callq 0x8b70
movq %rax, -0xc18(%rbp)
jmp 0x4e8f
movq -0xc18(%rbp), %rax
movsd 0x8(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x4eab
jp 0x4eab
jmp 0x4f30
leaq -0x248(%rbp), %rdi
callq 0x8b70
movq %rax, -0xc20(%rbp)
jmp 0x4ec0
movq -0xc20(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xc30(%rbp)
leaq -0x248(%rbp), %rdi
callq 0x8b70
movq %rax, -0xc28(%rbp)
jmp 0x4ee8
movsd -0xc30(%rbp), %xmm0
movq -0xc28(%rbp), %rax
movsd 0x8(%rax), %xmm1
leaq -0x828(%rbp), %rdi
leaq -0x7c8(%rbp), %rsi
callq 0x3740
jmp 0x4f11
leaq -0x7c8(%rbp), %rdi
leaq -0x828(%rbp), %rsi
callq 0x8aa0
leaq -0x828(%rbp), %rdi
callq 0x84c0
leaq -0x840(%rbp), %rdi
leaq -0x7c8(%rbp), %rsi
callq 0x85b0
jmp 0x4f45
leaq -0x840(%rbp), %rdi
callq 0x8b90
testb $0x1, %al
jne 0x4f57
jmp 0x4f85
movq 0x3607a(%rip), %rax     # 0x3afd8
movq (%rax), %rdi
leaq 0x26ac0(%rip), %rsi     # 0x2ba28
movb $0x0, %al
callq 0x3390
movl $0x1, -0x4(%rbp)
movl $0x1, -0x78c(%rbp)
jmp 0x7108
leaq -0x840(%rbp), %rdi
callq 0x82d0
cmpq $0x3, %rax
jae 0x4ff8
movq 0x3603a(%rip), %rax     # 0x3afd8
movq (%rax), %rax
movq %rax, -0xc38(%rbp)
leaq -0x840(%rbp), %rdi
callq 0x82d0
movq -0xc38(%rbp), %rdi
movq %rax, %rcx
leaq 0x26aa8(%rip), %rdx     # 0x2ba6d
leaq 0x26a9c(%rip), %rax     # 0x2ba68
cmpq $0x1, %rcx
cmoveq %rax, %rdx
leaq 0x26a5c(%rip), %rsi     # 0x2ba37
movb $0x0, %al
callq 0x3390
movl $0x1, -0x4(%rbp)
movl $0x1, -0x78c(%rbp)
jmp 0x7108
leaq -0x788(%rbp), %rdi
callq 0x8a20
movq %rax, -0xc40(%rbp)
jmp 0x500d
movq -0xc40(%rbp), %rax
testb $0x1, (%rax)
je 0x51f2
leaq -0x2f8(%rbp), %rdi
callq 0x89e0
movq %rax, -0xc48(%rbp)
jmp 0x5032
movq -0xc48(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0xc54(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x8bd0
movq %rax, -0xc50(%rbp)
jmp 0x505a
movq -0xc50(%rbp), %rax
movl (%rax), %eax
decl %eax
cvtsi2ss %eax, %xmm0
movss %xmm0, -0xc64(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x89e0
movq %rax, -0xc60(%rbp)
jmp 0x5086
movss -0xc54(%rbp), %xmm1
movss -0xc64(%rbp), %xmm0
movq -0xc60(%rbp), %rax
movss (%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
leaq -0x858(%rbp), %rdi
leaq -0x840(%rbp), %rsi
xorl %edx, %edx
callq 0xc1b0
jmp 0x50c4
leaq -0x858(%rbp), %rdi
callq 0x3ca0
movsd %xmm0, -0xc70(%rbp)
jmp 0x50da
leaq -0x370(%rbp), %rdi
callq 0x89e0
movq %rax, -0xc78(%rbp)
jmp 0x50ef
movsd -0xc70(%rbp), %xmm0
movq -0xc78(%rbp), %rax
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x860(%rbp)
movsd -0x860(%rbp), %xmm1
movsd 0x25efe(%rip), %xmm0    # 0x2b020
addsd %xmm0, %xmm1
leaq -0x870(%rbp), %rdi
movaps %xmm1, %xmm0
callq 0x8470
jmp 0x5137
leaq -0x870(%rbp), %rdi
movss 0x25f72(%rip), %xmm0    # 0x2b0b8
callq 0x8bf0
movsd %xmm1, -0xc88(%rbp)
movsd %xmm0, -0xc80(%rbp)
jmp 0x515d
movsd -0xc88(%rbp), %xmm0
movsd -0xc80(%rbp), %xmm1
movsd %xmm1, -0x880(%rbp)
movsd %xmm0, -0x878(%rbp)
leaq -0x660(%rbp), %rdi
leaq -0x880(%rbp), %rsi
callq 0x8ad0
jmp 0x5192
leaq -0x6e0(%rbp), %rdi
leaq -0x870(%rbp), %rsi
callq 0x8ad0
jmp 0x51a7
leaq -0x858(%rbp), %rdi
callq 0x84c0
jmp 0x58e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x732a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x858(%rbp), %rdi
callq 0x84c0
jmp 0x732a
leaq -0x660(%rbp), %rdi
callq 0x8b50
movq %rax, -0xc90(%rbp)
jmp 0x5207
leaq -0x6e0(%rbp), %rdi
callq 0x8b50
movq %rax, -0xc98(%rbp)
jmp 0x521c
movq -0xc98(%rbp), %rsi
movq -0xc90(%rbp), %rdi
callq 0x8b00
movsd %xmm1, -0xca8(%rbp)
movsd %xmm0, -0xca0(%rbp)
jmp 0x5241
movsd -0xca8(%rbp), %xmm0
movsd -0xca0(%rbp), %xmm1
movsd %xmm1, -0x890(%rbp)
movsd %xmm0, -0x888(%rbp)
leaq -0x6e0(%rbp), %rdi
callq 0x8b50
movq %rax, -0xcb0(%rbp)
jmp 0x5276
movq -0xcb0(%rbp), %rax
movups (%rax), %xmm0
movaps %xmm0, -0x8a0(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x89e0
movq %rax, -0xcb8(%rbp)
jmp 0x529c
movq -0xcb8(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
leaq -0x8c0(%rbp), %rdi
leaq -0x840(%rbp), %rsi
xorl %edx, %edx
callq 0xc1b0
jmp 0x52c2
leaq -0x8c0(%rbp), %rdi
callq 0x3ca0
movsd %xmm0, -0xcc0(%rbp)
jmp 0x52d8
movsd -0xcc0(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xcd0(%rbp)
leaq -0x8c0(%rbp), %rdi
callq 0x84c0
movss -0xcd0(%rbp), %xmm0
movss %xmm0, -0x8a4(%rbp)
movss -0x8a4(%rbp), %xmm0
movss %xmm0, -0xccc(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x89e0
movq %rax, -0xcc8(%rbp)
jmp 0x532d
movss -0xccc(%rbp), %xmm0
movq -0xcc8(%rbp), %rax
movss (%rax), %xmm1
addss %xmm1, %xmm0
addss %xmm0, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xce8(%rbp)
movss -0x8a4(%rbp), %xmm0
movss %xmm0, -0xcdc(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x89e0
movq %rax, -0xcd8(%rbp)
jmp 0x5379
movsd -0xce8(%rbp), %xmm0
movss -0xcdc(%rbp), %xmm1
movq -0xcd8(%rbp), %rax
movss (%rax), %xmm2
addss %xmm2, %xmm1
addss %xmm1, %xmm1
cvtss2sd %xmm1, %xmm1
leaq -0x8d0(%rbp), %rdi
callq 0x8470
jmp 0x53ae
movl $0x0, -0x8d4(%rbp)
movl -0x8d4(%rbp), %eax
movl %eax, -0xcf4(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x8bd0
movq %rax, -0xcf0(%rbp)
jmp 0x53d9
movl -0xcf4(%rbp), %eax
movq -0xcf0(%rbp), %rcx
cmpl (%rcx), %eax
jge 0x5727
leaq -0x8a0(%rbp), %rdi
leaq -0x8d0(%rbp), %rsi
callq 0x8c40
movsd %xmm1, -0xd08(%rbp)
movsd %xmm0, -0xd00(%rbp)
jmp 0x5413
movsd -0xd08(%rbp), %xmm0
movsd -0xd00(%rbp), %xmm1
movsd %xmm1, -0x8e8(%rbp)
movsd %xmm0, -0x8e0(%rbp)
movsd -0x8e8(%rbp), %xmm0
ucomisd -0x890(%rbp), %xmm0
ja 0x545b
movsd -0x8e0(%rbp), %xmm0
ucomisd -0x888(%rbp), %xmm0
jbe 0x559e
movq 0x35b76(%rip), %rax     # 0x3afd8
movq (%rax), %rax
movq %rax, -0xd28(%rbp)
movl -0x8d4(%rbp), %eax
movl %eax, -0xd1c(%rbp)
movss -0x8a4(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xd18(%rbp)
leaq -0x660(%rbp), %rdi
callq 0x8b70
movq %rax, -0xd10(%rbp)
jmp 0x54a1
movq -0xd10(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xd38(%rbp)
leaq -0x660(%rbp), %rdi
callq 0x8b70
movq %rax, -0xd30(%rbp)
jmp 0x54c9
movq -0xd30(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0xd48(%rbp)
leaq -0x6a0(%rbp), %rdi
callq 0x8b70
movq %rax, -0xd40(%rbp)
jmp 0x54f2
movq -0xd40(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xd58(%rbp)
leaq -0x6a0(%rbp), %rdi
callq 0x8b70
movq %rax, -0xd50(%rbp)
jmp 0x551a
movsd -0xd58(%rbp), %xmm3
movsd -0xd48(%rbp), %xmm2
movsd -0xd38(%rbp), %xmm1
movsd -0xd18(%rbp), %xmm0
movl -0xd1c(%rbp), %edx
movq -0xd28(%rbp), %rdi
movq -0xd50(%rbp), %rax
movsd 0x8(%rax), %xmm4
leaq 0x26517(%rip), %rsi     # 0x2ba71
movb $0x5, %al
callq 0x3390
leaq -0x2d0(%rbp), %rdi
leaq -0x8d4(%rbp), %rsi
callq 0x8c90
jmp 0x5576
jmp 0x5727
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x8c0(%rbp), %rdi
callq 0x84c0
jmp 0x732a
leaq -0x6a0(%rbp), %rdi
callq 0x8b50
movq %rax, -0xd60(%rbp)
jmp 0x55b3
movq -0xd60(%rbp), %rsi
leaq -0x8e8(%rbp), %rdi
callq 0x8c40
movsd %xmm1, -0xd70(%rbp)
movsd %xmm0, -0xd68(%rbp)
jmp 0x55d8
movsd -0xd70(%rbp), %xmm0
movsd -0xd68(%rbp), %xmm1
movsd %xmm1, -0x8f8(%rbp)
movsd %xmm0, -0x8f0(%rbp)
movups -0x8f8(%rbp), %xmm0
movaps %xmm0, -0x8a0(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x89e0
movq %rax, -0xd78(%rbp)
jmp 0x561b
movq -0xd78(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xd88(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x89e0
movq %rax, -0xd80(%rbp)
jmp 0x5647
movsd -0xd88(%rbp), %xmm0
movq -0xd80(%rbp), %rax
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
leaq -0x928(%rbp), %rdi
callq 0x8470
jmp 0x566c
leaq -0x928(%rbp), %rdi
movss 0x25a3d(%rip), %xmm0    # 0x2b0b8
callq 0x8bf0
movsd %xmm1, -0xd98(%rbp)
movsd %xmm0, -0xd90(%rbp)
jmp 0x5692
movsd -0xd98(%rbp), %xmm0
movsd -0xd90(%rbp), %xmm1
movsd %xmm1, -0x918(%rbp)
movsd %xmm0, -0x910(%rbp)
leaq -0x8d0(%rbp), %rdi
leaq -0x918(%rbp), %rsi
callq 0x8c40
movsd %xmm1, -0xda8(%rbp)
movsd %xmm0, -0xda0(%rbp)
jmp 0x56d7
movsd -0xda8(%rbp), %xmm0
movsd -0xda0(%rbp), %xmm1
movsd %xmm1, -0x908(%rbp)
movsd %xmm0, -0x900(%rbp)
movq -0x908(%rbp), %rax
movq %rax, -0x8d0(%rbp)
movq -0x900(%rbp), %rax
movq %rax, -0x8c8(%rbp)
movl -0x8d4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8d4(%rbp)
jmp 0x53b8
leaq -0x6a0(%rbp), %rdi
callq 0x8b50
movq %rax, -0xdb0(%rbp)
jmp 0x573c
movq -0xdb0(%rbp), %rsi
leaq -0x8a0(%rbp), %rdi
callq 0x8b00
movsd %xmm1, -0xdc0(%rbp)
movsd %xmm0, -0xdb8(%rbp)
jmp 0x5761
movsd -0xdc0(%rbp), %xmm0
movsd -0xdb8(%rbp), %xmm1
movsd %xmm1, -0x938(%rbp)
movsd %xmm0, -0x930(%rbp)
movups -0x938(%rbp), %xmm0
movaps %xmm0, -0x8a0(%rbp)
leaq -0x6e0(%rbp), %rdi
callq 0x8b50
movq %rax, -0xdc8(%rbp)
jmp 0x57a4
leaq -0x890(%rbp), %rdi
leaq -0x8a0(%rbp), %rsi
callq 0x8b00
movsd %xmm1, -0xdd8(%rbp)
movsd %xmm0, -0xdd0(%rbp)
jmp 0x57c9
movsd -0xdd8(%rbp), %xmm0
movsd -0xdd0(%rbp), %xmm1
movsd %xmm1, -0x978(%rbp)
movsd %xmm0, -0x970(%rbp)
leaq -0x6e0(%rbp), %rdi
callq 0x8b50
movq %rax, -0xde0(%rbp)
jmp 0x57fe
movq -0xde0(%rbp), %rsi
leaq -0x978(%rbp), %rdi
callq 0x8b00
movsd %xmm1, -0xdf0(%rbp)
movsd %xmm0, -0xde8(%rbp)
jmp 0x5823
movsd -0xdf0(%rbp), %xmm0
movsd -0xde8(%rbp), %xmm1
movsd %xmm1, -0x968(%rbp)
movsd %xmm0, -0x960(%rbp)
leaq -0x968(%rbp), %rdi
movss 0x25866(%rip), %xmm0    # 0x2b0b8
callq 0x8cb0
movsd %xmm1, -0xe00(%rbp)
movsd %xmm0, -0xdf8(%rbp)
jmp 0x5869
movq -0xdc8(%rbp), %rdi
movsd -0xe00(%rbp), %xmm0
movsd -0xdf8(%rbp), %xmm1
movsd %xmm1, -0x958(%rbp)
movsd %xmm0, -0x950(%rbp)
leaq -0x958(%rbp), %rsi
callq 0x8c40
movsd %xmm1, -0xe10(%rbp)
movsd %xmm0, -0xe08(%rbp)
jmp 0x58ae
movsd -0xe10(%rbp), %xmm0
movsd -0xe08(%rbp), %xmm1
movsd %xmm1, -0x948(%rbp)
movsd %xmm0, -0x940(%rbp)
leaq -0x6e0(%rbp), %rdi
leaq -0x948(%rbp), %rsi
callq 0x8ad0
jmp 0x58e3
jmp 0x58e5
movsd -0x7a8(%rbp), %xmm0
movsd %xmm0, -0xe28(%rbp)
movsd -0x798(%rbp), %xmm0
movsd %xmm0, -0xe20(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x89e0
movq %rax, -0xe18(%rbp)
jmp 0x591a
movsd -0xe28(%rbp), %xmm0
movsd -0xe20(%rbp), %xmm1
movq -0xe18(%rbp), %rax
movss (%rax), %xmm2
movss 0x25777(%rip), %xmm3    # 0x2b0b4
mulss %xmm3, %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd -0x7a0(%rbp), %xmm1
mulsd %xmm1, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x980(%rbp)
movq $0x0, -0x988(%rbp)
leaq -0x738(%rbp), %rdi
callq 0x8a20
movq %rax, -0xe30(%rbp)
jmp 0x5985
movq -0xe30(%rbp), %rax
testb $0x1, (%rax)
je 0x5aba
leaq -0x1c8(%rbp), %rdi
callq 0x8d40
movq %rax, -0xe38(%rbp)
jmp 0x59aa
leaq -0x430(%rbp), %rdi
callq 0x89e0
movq %rax, -0xe40(%rbp)
jmp 0x59bf
movq -0xe38(%rbp), %rdi
movq -0xe40(%rbp), %rax
movss (%rax), %xmm0
movss 0x256b7(%rip), %xmm1    # 0x2b090
mulss %xmm1, %xmm0
movss %xmm0, -0x98c(%rbp)
leaq -0x98c(%rbp), %rsi
callq 0x8d00
movq %rax, -0xe48(%rbp)
jmp 0x59fa
movq -0xe48(%rbp), %rsi
leaq -0x1c8(%rbp), %rdi
callq 0x8a00
jmp 0x5a0f
leaq -0x788(%rbp), %rdi
callq 0x8a20
movq %rax, -0xe50(%rbp)
jmp 0x5a24
movq -0xe50(%rbp), %rax
movb (%rax), %al
xorb $0x1, %al
movb %al, -0xe59(%rbp)
leaq -0x760(%rbp), %rdi
callq 0x89e0
movq %rax, -0xe58(%rbp)
jmp 0x5a4a
movq -0xe58(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0xe6c(%rbp)
leaq -0x458(%rbp), %rdi
callq 0x89e0
movq %rax, -0xe68(%rbp)
jmp 0x5a72
movb -0xe59(%rbp), %al
movss -0xe6c(%rbp), %xmm0
movq -0xe68(%rbp), %rcx
movss (%rcx), %xmm1
mulss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movzbl %al, %edi
andl $0x1, %edi
callq 0xe7d0
movq %rax, -0xe78(%rbp)
jmp 0x5aa7
movq -0xe78(%rbp), %rax
movq %rax, -0x988(%rbp)
jmp 0x5b7a
movsd -0x980(%rbp), %xmm0
movsd %xmm0, -0xe88(%rbp)
leaq -0x520(%rbp), %rdi
callq 0x89e0
movq %rax, -0xe80(%rbp)
jmp 0x5adf
movq -0xe80(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xe98(%rbp)
leaq -0x5e0(%rbp), %rdi
callq 0x89e0
movq %rax, -0xe90(%rbp)
jmp 0x5b0b
movq -0xe90(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xea8(%rbp)
leaq -0x5b8(%rbp), %rdi
callq 0x89e0
movq %rax, -0xea0(%rbp)
jmp 0x5b37
movsd -0xea8(%rbp), %xmm2
movsd -0xe98(%rbp), %xmm1
movsd -0xe88(%rbp), %xmm0
movq -0xea0(%rbp), %rax
movss (%rax), %xmm3
cvtss2sd %xmm3, %xmm3
callq 0xe6c0
movq %rax, -0xeb0(%rbp)
jmp 0x5b6c
movq -0xeb0(%rbp), %rax
movq %rax, -0x988(%rbp)
movq -0x988(%rbp), %rax
movq %rax, -0xec0(%rbp)
leaq -0x660(%rbp), %rdi
callq 0x8b50
movq %rax, -0xeb8(%rbp)
jmp 0x5b9d
leaq -0x480(%rbp), %rdi
callq 0x89e0
movq %rax, -0xec8(%rbp)
jmp 0x5bb2
movq -0xeb8(%rbp), %rsi
movq -0xec0(%rbp), %rdi
movq -0xec8(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movq (%rdi), %rax
movq (%rax), %rax
callq *%rax
jmp 0x5bd9
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x25f45(%rip), %rsi     # 0x2bb33
xorl %eax, %eax
callq *%rcx
jmp 0x5bf4
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x26400(%rip), %rsi     # 0x2c009
xorl %eax, %eax
callq *%rcx
jmp 0x5c0f
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x26918(%rip), %rsi     # 0x2c53c
xorl %eax, %eax
callq *%rcx
jmp 0x5c2a
movl $0x0, -0x990(%rbp)
movl -0x990(%rbp), %eax
cmpl -0x8(%rbp), %eax
jge 0x5c71
movq -0x10(%rbp), %rax
movslq -0x990(%rbp), %rcx
movq (%rax,%rcx,8), %rsi
leaq 0x25f14(%rip), %rdi     # 0x2bb69
xorl %eax, %eax
callq 0x3040
jmp 0x5c5e
jmp 0x5c60
movl -0x990(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x990(%rbp)
jmp 0x5c34
leaq 0x26391(%rip), %rdi     # 0x2c009
xorl %eax, %eax
callq 0x3040
jmp 0x5c81
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x26373(%rip), %rsi     # 0x2c009
xorl %eax, %eax
callq *%rcx
jmp 0x5c9c
leaq -0x158(%rbp), %rdi
callq 0x8a60
movq %rax, -0xed0(%rbp)
jmp 0x5cb1
movq -0xed0(%rbp), %rdi
callq 0x3420
testb $0x1, %al
jne 0x5d64
movq -0x988(%rbp), %rax
movq %rax, -0xee0(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x8a60
movq %rax, -0xed8(%rbp)
jmp 0x5ce8
movq -0xed8(%rbp), %rdi
callq 0x30e0
movq -0xee0(%rbp), %rdi
movq %rax, %rdx
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x25e61(%rip), %rsi     # 0x2bb6d
xorl %eax, %eax
callq *%rcx
jmp 0x5d12
movq -0x988(%rbp), %rax
movq %rax, -0xef0(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x8d40
movq %rax, -0xee8(%rbp)
jmp 0x5d35
movq -0xef0(%rbp), %rdi
movq -0xee8(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x25e34(%rip), %rsi     # 0x2bb8d
movb $0x1, %al
callq *%rcx
jmp 0x5d5f
jmp 0x5e31
movq -0x988(%rbp), %rax
movq %rax, -0xf00(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x8a60
movq %rax, -0xef8(%rbp)
jmp 0x5d84
movq -0xef8(%rbp), %rdi
callq 0x30e0
movq -0xf00(%rbp), %rdi
movq %rax, %rdx
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x25df7(%rip), %rsi     # 0x2bb9f
xorl %eax, %eax
callq *%rcx
jmp 0x5dae
movq -0x988(%rbp), %rax
movq %rax, -0xf10(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x8d40
movq %rax, -0xf08(%rbp)
jmp 0x5dd1
movq -0xf08(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xf20(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x8d40
movq %rax, -0xf18(%rbp)
jmp 0x5dfd
movsd -0xf20(%rbp), %xmm0
movq -0xf10(%rbp), %rdi
movq -0xf18(%rbp), %rax
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x25d98(%rip), %rsi     # 0x2bbc1
movb $0x2, %al
callq *%rcx
jmp 0x5e2f
jmp 0x5e31
movq -0x988(%rbp), %rax
movq %rax, -0xf30(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x8d40
movq %rax, -0xf28(%rbp)
jmp 0x5e54
movq -0xf28(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xf40(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x8d60
movq %rax, -0xf38(%rbp)
jmp 0x5e80
movq -0xf38(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xf4c(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x8d40
movq %rax, -0xf48(%rbp)
jmp 0x5ea4
movl -0xf4c(%rbp), %edx
movsd -0xf40(%rbp), %xmm0
movq -0xf30(%rbp), %rdi
movq -0xf48(%rbp), %rax
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x25d15(%rip), %rsi     # 0x2bbeb
movb $0x2, %al
callq *%rcx
jmp 0x5edc
movq -0x988(%rbp), %rax
movq %rax, -0xf60(%rbp)
leaq -0x480(%rbp), %rdi
callq 0x8d40
movq %rax, -0xf58(%rbp)
jmp 0x5eff
movq -0xf58(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xf70(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0x8d40
movq %rax, -0xf68(%rbp)
jmp 0x5f2b
movsd -0xf70(%rbp), %xmm0
movq -0xf60(%rbp), %rdi
movq -0xf68(%rbp), %rax
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x25cbc(%rip), %rsi     # 0x2bc13
movb $0x2, %al
callq *%rcx
jmp 0x5f5d
movq -0x988(%rbp), %rax
movq %rax, -0xf80(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x8d40
movq %rax, -0xf78(%rbp)
jmp 0x5f80
movq -0xf78(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xf90(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x8d40
movq %rax, -0xf88(%rbp)
jmp 0x5fac
movsd -0xf90(%rbp), %xmm0
movq -0xf80(%rbp), %rdi
movq -0xf88(%rbp), %rax
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x25c70(%rip), %rsi     # 0x2bc48
movb $0x2, %al
callq *%rcx
jmp 0x5fde
movq -0x988(%rbp), %rax
movq %rax, -0xfa0(%rbp)
leaq -0x660(%rbp), %rdi
callq 0x8b70
movq %rax, -0xf98(%rbp)
jmp 0x6001
movq -0xf98(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xfb0(%rbp)
leaq -0x660(%rbp), %rdi
callq 0x8b70
movq %rax, -0xfa8(%rbp)
jmp 0x6029
movq -0xfa8(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0xfc0(%rbp)
leaq -0x6a0(%rbp), %rdi
callq 0x8b70
movq %rax, -0xfb8(%rbp)
jmp 0x6052
movq -0xfb8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xfd0(%rbp)
leaq -0x6a0(%rbp), %rdi
callq 0x8b70
movq %rax, -0xfc8(%rbp)
jmp 0x607a
movsd -0xfd0(%rbp), %xmm2
movsd -0xfc0(%rbp), %xmm1
movsd -0xfb0(%rbp), %xmm0
movq -0xfa0(%rbp), %rdi
movq -0xfc8(%rbp), %rax
movsd 0x8(%rax), %xmm3
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x25bba(%rip), %rsi     # 0x2bc6d
movb $0x4, %al
callq *%rcx
jmp 0x60b9
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x25bdc(%rip), %rsi     # 0x2bcaa
xorl %eax, %eax
callq *%rcx
jmp 0x60d4
movq -0x988(%rbp), %rax
movq %rax, -0xfe0(%rbp)
leaq -0x660(%rbp), %rdi
callq 0x8b50
movq %rax, -0xfd8(%rbp)
jmp 0x60f7
leaq -0x480(%rbp), %rdi
callq 0x89e0
movq %rax, -0xfe8(%rbp)
jmp 0x610c
movq -0xfd8(%rbp), %rsi
movq -0xfe0(%rbp), %rdi
movq -0xfe8(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movq (%rdi), %rax
movq 0x8(%rax), %rax
callq *%rax
jmp 0x6134
leaq -0x1f0(%rbp), %rdi
callq 0x89e0
movq %rax, -0xff0(%rbp)
jmp 0x6149
movq -0xff0(%rbp), %rax
movss (%rax), %xmm0
callq 0x8d80
movss %xmm0, -0xff4(%rbp)
jmp 0x6163
movss -0xff4(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x24eb1(%rip), %xmm0    # 0x2b028
ucomisd %xmm1, %xmm0
jbe 0x618a
xorps %xmm0, %xmm0
movsd %xmm0, -0x1000(%rbp)
jmp 0x61c2
leaq -0x1f0(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1008(%rbp)
jmp 0x619f
movq -0x1008(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x24e7a(%rip), %xmm0    # 0x2b030
divsd %xmm1, %xmm0
movsd %xmm0, -0x1000(%rbp)
movsd -0x1000(%rbp), %xmm0
movsd %xmm0, -0x998(%rbp)
movq $0x0, -0x9a0(%rbp)
movq $0x0, -0x9a8(%rbp)
movl $0x41200000, -0x9ac(%rbp) # imm = 0x41200000
leaq -0x6e0(%rbp), %rdi
callq 0x8b50
movq %rax, -0x1010(%rbp)
jmp 0x6207
movq -0x1010(%rbp), %rax
movups (%rax), %xmm0
movaps %xmm0, -0x9c0(%rbp)
movq -0x988(%rbp), %rax
movq %rax, -0x1020(%rbp)
leaq -0x480(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1018(%rbp)
jmp 0x623b
movq -0x1020(%rbp), %rdi
movq -0x1018(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movq (%rdi), %rax
movq 0x28(%rax), %rax
callq *%rax
jmp 0x625c
movl $0x0, -0x9c4(%rbp)
movl -0x9c4(%rbp), %eax
movl %eax, -0x102c(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x8bd0
movq %rax, -0x1028(%rbp)
jmp 0x6287
movl -0x102c(%rbp), %eax
movq -0x1028(%rbp), %rcx
cmpl (%rcx), %eax
jge 0x7022
leaq -0x2f8(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1038(%rbp)
jmp 0x62b1
movq -0x1038(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x1048(%rbp)
cvtsi2ssl -0x9c4(%rbp), %xmm0
movss %xmm0, -0x1044(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1040(%rbp)
jmp 0x62e9
movss -0x1048(%rbp), %xmm1
movss -0x1044(%rbp), %xmm0
movq -0x1040(%rbp), %rax
movss (%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x9c8(%rbp)
movss -0x9c8(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
leaq -0x9e0(%rbp), %rdi
leaq -0x840(%rbp), %rsi
xorl %edx, %edx
callq 0xc1b0
jmp 0x6337
leaq -0x9e0(%rbp), %rdi
callq 0x82d0
cmpq $0x0, %rax
jne 0x640d
movq 0x34c84(%rip), %rax     # 0x3afd8
movq (%rax), %rax
movq %rax, -0x1058(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1050(%rbp)
jmp 0x6373
movq -0x1050(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x1068(%rbp)
cvtsi2ssl -0x9c4(%rbp), %xmm0
movss %xmm0, -0x1064(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1060(%rbp)
jmp 0x63ab
movq -0x1058(%rbp), %rdi
movss -0x1068(%rbp), %xmm1
movss -0x1064(%rbp), %xmm0
movq -0x1060(%rbp), %rax
movss (%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
leaq 0x258d0(%rip), %rsi     # 0x2bcb0
movb $0x1, %al
callq 0x3390
movl $0xa, -0x78c(%rbp)
jmp 0x6fe1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x7011
leaq -0x9e0(%rbp), %rdi
callq 0x3ca0
movsd %xmm0, -0x1070(%rbp)
jmp 0x6423
movsd -0x1070(%rbp), %xmm0
movsd %xmm0, -0x9e8(%rbp)
movsd -0x9e8(%rbp), %xmm0
movsd %xmm0, -0x1080(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1078(%rbp)
jmp 0x6458
movsd -0x1080(%rbp), %xmm0
movq -0x1078(%rbp), %rax
movss (%rax), %xmm1
cvtss2sd %xmm1, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x1098(%rbp)
movsd -0x9e8(%rbp), %xmm0
movsd %xmm0, -0x1090(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1088(%rbp)
jmp 0x64a0
movsd -0x1098(%rbp), %xmm0
movsd -0x1090(%rbp), %xmm1
movq -0x1088(%rbp), %rax
movss (%rax), %xmm2
cvtss2sd %xmm2, %xmm2
addsd %xmm2, %xmm1
leaq -0x9f8(%rbp), %rdi
callq 0x8470
jmp 0x64d1
leaq -0x788(%rbp), %rdi
callq 0x8a20
movq %rax, -0x10a0(%rbp)
jmp 0x64e6
movq -0x10a0(%rbp), %rax
testb $0x1, (%rax)
jne 0x6553
leaq -0x9c0(%rbp), %rdi
leaq -0x9f8(%rbp), %rsi
callq 0x8c40
movsd %xmm1, -0x10b0(%rbp)
movsd %xmm0, -0x10a8(%rbp)
jmp 0x6517
movsd -0x10b0(%rbp), %xmm0
movsd -0x10a8(%rbp), %xmm1
movsd %xmm1, -0xa08(%rbp)
movsd %xmm0, -0xa00(%rbp)
movq -0xa08(%rbp), %rax
movq %rax, -0x9c0(%rbp)
movq -0xa00(%rbp), %rax
movq %rax, -0x9b8(%rbp)
movq -0x988(%rbp), %rax
movq %rax, -0x10b8(%rbp)
cmpl $0x0, -0x9c4(%rbp)
jle 0x659c
leaq -0x1c8(%rbp), %rdi
callq 0x89e0
movq %rax, -0x10c0(%rbp)
jmp 0x657f
movq -0x10c0(%rbp), %rax
movss 0x24aea(%rip), %xmm0    # 0x2b078
addss (%rax), %xmm0
movss %xmm0, -0x10c4(%rbp)
jmp 0x65ae
movss 0x24ad4(%rip), %xmm0    # 0x2b078
movss %xmm0, -0x10c4(%rbp)
jmp 0x65ae
movq -0x10b8(%rbp), %rdi
movss -0x10c4(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movq (%rdi), %rax
movq 0x48(%rax), %rax
leaq -0x9c0(%rbp), %rsi
callq *%rax
jmp 0x65d3
leaq -0x9e0(%rbp), %rdi
callq 0x35f0
movsd %xmm0, -0x10d0(%rbp)
jmp 0x65e9
movsd -0x10d0(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xa0c(%rbp)
movss -0xa0c(%rbp), %xmm0
movss %xmm0, -0x10dc(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x89e0
movq %rax, -0x10d8(%rbp)
jmp 0x6622
movss -0x10dc(%rbp), %xmm0
movq -0x10d8(%rbp), %rax
movss (%rax), %xmm1
mulss %xmm1, %xmm0
addss %xmm0, %xmm0
movss %xmm0, -0xa10(%rbp)
movss -0xa0c(%rbp), %xmm0
movss %xmm0, -0x10ec(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0x89e0
movq %rax, -0x10e8(%rbp)
jmp 0x666a
movss -0x10ec(%rbp), %xmm0
movq -0x10e8(%rbp), %rax
movss (%rax), %xmm1
divss %xmm1, %xmm0
movss %xmm0, -0xa14(%rbp)
leaq -0x480(%rbp), %rdi
callq 0x8d40
movq %rax, -0x10f8(%rbp)
jmp 0x669e
movq -0x10f8(%rbp), %rsi
leaq -0xa14(%rbp), %rdi
callq 0x8d00
movq %rax, -0x1100(%rbp)
jmp 0x66ba
movq -0x1100(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0xa14(%rbp)
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
callq *%rax
jmp 0x66df
movq -0x988(%rbp), %rdi
movss -0xa14(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movq (%rdi), %rax
movq 0x28(%rax), %rax
callq *%rax
jmp 0x66fd
movq -0x988(%rbp), %rax
movq %rax, -0x1118(%rbp)
movl -0x9c4(%rbp), %eax
incl %eax
movl %eax, -0x110c(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1108(%rbp)
jmp 0x672e
movq -0x1108(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x1128(%rbp)
cvtsi2ssl -0x9c4(%rbp), %xmm0
movss %xmm0, -0x1124(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1120(%rbp)
jmp 0x6766
movl -0x110c(%rbp), %edx
movq -0x1118(%rbp), %rdi
movss -0x1128(%rbp), %xmm1
movss -0x1124(%rbp), %xmm0
movq -0x1120(%rbp), %rax
movss (%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x25536(%rip), %rsi     # 0x2bcde
movb $0x1, %al
callq *%rcx
jmp 0x67ae
leaq -0x3e8(%rbp), %rdi
callq 0x8a20
movq %rax, -0x1130(%rbp)
jmp 0x67c3
movq -0x1130(%rbp), %rax
testb $0x1, (%rax)
je 0x68c4
leaq -0x458(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1138(%rbp)
jmp 0x67e8
movq -0x1138(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x1144(%rbp)
leaq -0x398(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1140(%rbp)
jmp 0x6810
movss -0x1144(%rbp), %xmm0
movq -0x1140(%rbp), %rax
movss (%rax), %xmm1
mulss %xmm1, %xmm0
movss %xmm0, -0xa18(%rbp)
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x254ba(%rip), %rsi     # 0x2bcfe
xorl %eax, %eax
callq *%rcx
jmp 0x684a
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x68(%rax), %rax
xorps %xmm1, %xmm1
movss 0x24851(%rip), %xmm2    # 0x2b0b4
movaps %xmm2, %xmm0
callq *%rax
jmp 0x686a
movq -0x988(%rbp), %rsi
movaps 0x24848(%rip), %xmm1    # 0x2b0c0
movsd -0x9e8(%rbp), %xmm0
pxor %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm1
movss -0xa18(%rbp), %xmm2
leaq -0x9e0(%rbp), %rdi
leaq -0x9c0(%rbp), %rdx
xorps %xmm0, %xmm0
callq 0x7550
jmp 0x68a8
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x40(%rax), %rax
movsd 0x24782(%rip), %xmm0    # 0x2b040
callq *%rax
jmp 0x68c2
jmp 0x68c4
leaq -0x370(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1150(%rbp)
jmp 0x68d9
movq -0x1150(%rbp), %rax
movss (%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x6b5b
leaq -0x458(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1158(%rbp)
jmp 0x6905
movq -0x1158(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x1164(%rbp)
leaq -0x398(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1160(%rbp)
jmp 0x692d
movss -0x1164(%rbp), %xmm0
movq -0x1160(%rbp), %rax
movss (%rax), %xmm1
mulss %xmm1, %xmm0
movss %xmm0, -0xa1c(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1170(%rbp)
jmp 0x6961
movq -0x1170(%rbp), %rax
movss (%rax), %xmm0
movss -0xa1c(%rbp), %xmm1
divss %xmm1, %xmm0
callq 0x8da0
movss %xmm0, -0x1174(%rbp)
jmp 0x6987
movss -0x1174(%rbp), %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0xa20(%rbp)
leaq -0xa38(%rbp), %rdi
leaq -0x9e0(%rbp), %rsi
callq 0x85b0
jmp 0x69ae
leaq -0x3c0(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1180(%rbp)
jmp 0x69c3
movq -0x1180(%rbp), %rax
movss (%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x6ac2
leaq -0x3c0(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1188(%rbp)
jmp 0x69ef
movq -0x1188(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
leaq -0xa68(%rbp), %rdi
leaq -0x9e0(%rbp), %rsi
xorl %edx, %edx
callq 0xc1b0
jmp 0x6a15
leaq -0x3c0(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1190(%rbp)
jmp 0x6a2a
movq -0x1190(%rbp), %rax
movss (%rax), %xmm0
movaps 0x24694(%rip), %xmm1    # 0x2b0d0
pxor %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
leaq -0xa50(%rbp), %rdi
leaq -0xa68(%rbp), %rsi
xorl %edx, %edx
callq 0xc1b0
jmp 0x6a5b
leaq -0xa38(%rbp), %rdi
leaq -0xa50(%rbp), %rsi
callq 0x8aa0
leaq -0xa50(%rbp), %rdi
callq 0x84c0
leaq -0xa68(%rbp), %rdi
callq 0x84c0
jmp 0x6ac2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x6b4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0xa68(%rbp), %rdi
callq 0x84c0
jmp 0x6b4a
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x18(%rax), %rcx
leaq 0x2523d(%rip), %rsi     # 0x2bd14
xorl %eax, %eax
callq *%rcx
jmp 0x6add
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x68(%rax), %rax
movss 0x245c1(%rip), %xmm1    # 0x2b0b4
xorps %xmm2, %xmm2
movaps %xmm2, %xmm0
callq *%rax
jmp 0x6afd
movq -0x988(%rbp), %rsi
cvtsi2ssl -0xa20(%rbp), %xmm0
movss -0xa1c(%rbp), %xmm2
mulss %xmm2, %xmm0
movss 0x24594(%rip), %xmm3    # 0x2b0b4
movaps %xmm2, %xmm1
mulss %xmm3, %xmm1
leaq -0xa38(%rbp), %rdi
leaq -0x9c0(%rbp), %rdx
callq 0x7550
jmp 0x6b3c
leaq -0xa38(%rbp), %rdi
callq 0x84c0
jmp 0x6b5b
leaq -0xa38(%rbp), %rdi
callq 0x84c0
jmp 0x7011
movss -0xa14(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xab0(%rbp)
leaq -0xaa8(%rbp), %rax
movq %rax, -0x11a0(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1198(%rbp)
jmp 0x6b92
movq -0x11a0(%rbp), %rax
movq -0x1198(%rbp), %rcx
movss (%rcx), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, (%rax)
leaq -0xaa0(%rbp), %rax
movq %rax, -0x11b0(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x89e0
movq %rax, -0x11a8(%rbp)
jmp 0x6bcf
movq -0x11b0(%rbp), %rax
movq -0x11a8(%rbp), %rcx
movss (%rcx), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, (%rax)
movsd -0x998(%rbp), %xmm0
movsd %xmm0, -0xa98(%rbp)
leaq -0xa90(%rbp), %rax
movq %rax, -0x11c0(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x89e0
movq %rax, -0x11b8(%rbp)
jmp 0x6c1c
movq -0x11c0(%rbp), %rax
movq -0x11b8(%rbp), %rcx
movss (%rcx), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, (%rax)
leaq -0xa88(%rbp), %rax
movq %rax, -0x11d0(%rbp)
leaq -0x4d0(%rbp), %rdi
callq 0x89e0
movq %rax, -0x11c8(%rbp)
jmp 0x6c59
movq -0x11d0(%rbp), %rax
movq -0x11c8(%rbp), %rcx
movss (%rcx), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, (%rax)
leaq -0xa80(%rbp), %rax
movq %rax, -0x11e0(%rbp)
leaq -0x4f8(%rbp), %rdi
callq 0x89e0
movq %rax, -0x11d8(%rbp)
jmp 0x6c96
movq -0x11e0(%rbp), %rax
movq -0x11d8(%rbp), %rcx
movss (%rcx), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, (%rax)
leaq -0xa78(%rbp), %rax
movq %rax, -0x11f0(%rbp)
leaq -0x548(%rbp), %rdi
callq 0x89e0
movq %rax, -0x11e8(%rbp)
jmp 0x6cd3
movq -0x11f0(%rbp), %rax
movq -0x11e8(%rbp), %rcx
movss (%rcx), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, (%rax)
leaq -0xa70(%rbp), %rax
movq %rax, -0x1200(%rbp)
leaq -0x5e0(%rbp), %rdi
callq 0x89e0
movq %rax, -0x11f8(%rbp)
jmp 0x6d10
movq -0x1200(%rbp), %rax
movq -0x11f8(%rbp), %rcx
movss (%rcx), %xmm0
movss %xmm0, (%rax)
leaq -0xa6c(%rbp), %rax
movq %rax, -0x1210(%rbp)
leaq -0x608(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1208(%rbp)
jmp 0x6d49
movq -0x1210(%rbp), %rax
movq -0x1208(%rbp), %rcx
movss (%rcx), %xmm0
movss %xmm0, (%rax)
movq -0x988(%rbp), %rsi
leaq -0x9e0(%rbp), %rdi
leaq -0x9c0(%rbp), %rdx
leaq -0xab0(%rbp), %rcx
callq 0x79b0
jmp 0x6d82
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x60(%rax), %rax
callq *%rax
movsd %xmm0, -0x1218(%rbp)
jmp 0x6d9c
movsd -0x1218(%rbp), %xmm0
movsd %xmm0, -0xab8(%rbp)
movsd -0xab8(%rbp), %xmm1
movsd -0x9a8(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x9a8(%rbp)
movsd -0xab8(%rbp), %xmm1
movss -0xa14(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
divsd %xmm0, %xmm1
movsd -0x9a0(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x9a0(%rbp)
movq -0x988(%rbp), %rax
movq %rax, -0x1228(%rbp)
leaq -0x480(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1220(%rbp)
jmp 0x6e17
movq -0x1228(%rbp), %rdi
movq -0x1220(%rbp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movq (%rdi), %rax
movq 0x28(%rax), %rax
callq *%rax
jmp 0x6e38
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x38(%rax), %rax
callq *%rax
jmp 0x6e4a
movq -0x988(%rbp), %rax
movq %rax, -0x1238(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x89e0
movq %rax, -0x1230(%rbp)
jmp 0x6e6d
movq -0x1238(%rbp), %rdi
movq -0x1230(%rbp), %rax
movss (%rax), %xmm0
movss 0x241f1(%rip), %xmm1    # 0x2b078
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movq (%rdi), %rax
movq 0x40(%rax), %rax
callq *%rax
jmp 0x6e9a
leaq -0x788(%rbp), %rdi
callq 0x8a20
movq %rax, -0x1240(%rbp)
jmp 0x6eaf
movq -0x1240(%rbp), %rax
testb $0x1, (%rax)
jne 0x6f7a
leaq -0x9c0(%rbp), %rdi
leaq -0x9f8(%rbp), %rsi
callq 0x8c40
movsd %xmm1, -0x1250(%rbp)
movsd %xmm0, -0x1248(%rbp)
jmp 0x6ee4
movsd -0x1250(%rbp), %xmm0
movsd -0x1248(%rbp), %xmm1
movsd %xmm1, -0xad8(%rbp)
movsd %xmm0, -0xad0(%rbp)
leaq -0x6a0(%rbp), %rdi
callq 0x8b50
movq %rax, -0x1258(%rbp)
jmp 0x6f19
movq -0x1258(%rbp), %rsi
leaq -0xad8(%rbp), %rdi
callq 0x8c40
movsd %xmm1, -0x1268(%rbp)
movsd %xmm0, -0x1260(%rbp)
jmp 0x6f3e
movsd -0x1268(%rbp), %xmm0
movsd -0x1260(%rbp), %xmm1
movsd %xmm1, -0xac8(%rbp)
movsd %xmm0, -0xac0(%rbp)
movq -0xac8(%rbp), %rax
movq %rax, -0x9c0(%rbp)
movq -0xac0(%rbp), %rax
movq %rax, -0x9b8(%rbp)
leaq -0x738(%rbp), %rdi
callq 0x8a20
movq %rax, -0x1270(%rbp)
jmp 0x6f8f
movq -0x1270(%rbp), %rax
testb $0x1, (%rax)
jne 0x6fd7
movq 0x34036(%rip), %rax     # 0x3afd8
movq (%rax), %rdi
movss -0x9c8(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movss -0xa10(%rbp), %xmm1
movss 0x240cb(%rip), %xmm2    # 0x2b08c
divss %xmm2, %xmm1
cvtss2sd %xmm1, %xmm1
leaq 0x24d51(%rip), %rsi     # 0x2bd21
movb $0x2, %al
callq 0x3390
movl $0x0, -0x78c(%rbp)
leaq -0x9e0(%rbp), %rdi
callq 0x84c0
movl -0x78c(%rbp), %eax
testl %eax, %eax
je 0x6ffb
jmp 0x6ff9
jmp 0x6ffd
jmp 0x6ffd
movl -0x9c4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9c4(%rbp)
jmp 0x6266
leaq -0x9e0(%rbp), %rdi
callq 0x84c0
jmp 0x732a
movq -0x988(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
jmp 0x7034
leaq -0x738(%rbp), %rdi
callq 0x8a20
movq %rax, -0x1278(%rbp)
jmp 0x7049
movq -0x1278(%rbp), %rax
testb $0x1, (%rax)
jne 0x70fe
cvttsd2si -0x9a0(%rbp), %eax
movl %eax, -0xadc(%rbp)
movl -0xadc(%rbp), %eax
movl $0xe10, %ecx            # imm = 0xE10
cltd
idivl %ecx
movl %eax, -0xae0(%rbp)
movl -0xadc(%rbp), %eax
movl $0xe10, %ecx            # imm = 0xE10
cltd
idivl %ecx
movl %edx, -0xadc(%rbp)
movl -0xadc(%rbp), %eax
movl $0x3c, %ecx
cltd
idivl %ecx
movl %eax, -0xae4(%rbp)
movl -0xadc(%rbp), %eax
movl $0x3c, %ecx
cltd
idivl %ecx
movl %edx, -0xae8(%rbp)
movq 0x33f1a(%rip), %rax     # 0x3afd8
movq (%rax), %rdi
movl -0xae0(%rbp), %edx
movl -0xae4(%rbp), %ecx
movl -0xae8(%rbp), %r8d
movsd -0x9a8(%rbp), %xmm0
mulsd -0x980(%rbp), %xmm0
movsd 0x23f4c(%rip), %xmm1    # 0x2b038
divsd %xmm1, %xmm0
leaq 0x24c5e(%rip), %rsi     # 0x2bd55
movb $0x1, %al
callq 0x3390
movl $0x0, -0x78c(%rbp)
leaq -0x840(%rbp), %rdi
callq 0x84c0
leaq -0x7c8(%rbp), %rdi
callq 0x84c0
leaq -0x788(%rbp), %rdi
callq 0x8dc0
leaq -0x760(%rbp), %rdi
callq 0x8de0
leaq -0x738(%rbp), %rdi
callq 0x8dc0
leaq -0x710(%rbp), %rdi
callq 0x8e00
leaq -0x6e0(%rbp), %rdi
callq 0x8e20
leaq -0x6a0(%rbp), %rdi
callq 0x8e20
leaq -0x660(%rbp), %rdi
callq 0x8e20
leaq -0x630(%rbp), %rdi
callq 0x8de0
leaq -0x608(%rbp), %rdi
callq 0x8de0
leaq -0x5e0(%rbp), %rdi
callq 0x8de0
leaq -0x5b8(%rbp), %rdi
callq 0x8de0
leaq -0x590(%rbp), %rdi
callq 0x8de0
leaq -0x568(%rbp), %rdi
callq 0x8e00
leaq -0x548(%rbp), %rdi
callq 0x8de0
leaq -0x520(%rbp), %rdi
callq 0x8de0
leaq -0x4f8(%rbp), %rdi
callq 0x8de0
leaq -0x4d0(%rbp), %rdi
callq 0x8de0
leaq -0x4a8(%rbp), %rdi
callq 0x8de0
leaq -0x480(%rbp), %rdi
callq 0x8de0
leaq -0x458(%rbp), %rdi
callq 0x8de0
leaq -0x430(%rbp), %rdi
callq 0x8de0
leaq -0x408(%rbp), %rdi
callq 0x8e00
leaq -0x3e8(%rbp), %rdi
callq 0x8dc0
leaq -0x3c0(%rbp), %rdi
callq 0x8de0
leaq -0x398(%rbp), %rdi
callq 0x8de0
leaq -0x370(%rbp), %rdi
callq 0x8de0
leaq -0x348(%rbp), %rdi
callq 0x8de0
leaq -0x320(%rbp), %rdi
callq 0x8de0
leaq -0x2f8(%rbp), %rdi
callq 0x8de0
leaq -0x2d0(%rbp), %rdi
callq 0x8e40
leaq -0x2a8(%rbp), %rdi
callq 0x8de0
leaq -0x280(%rbp), %rdi
callq 0x8dc0
leaq -0x248(%rbp), %rdi
callq 0x8e20
leaq -0x218(%rbp), %rdi
callq 0x8de0
leaq -0x1f0(%rbp), %rdi
callq 0x8de0
leaq -0x1c8(%rbp), %rdi
callq 0x8de0
leaq -0x1a0(%rbp), %rdi
callq 0x8e00
leaq -0x158(%rbp), %rdi
callq 0x8e60
leaq -0x118(%rbp), %rdi
callq 0x8e00
leaq -0xf8(%rbp), %rdi
callq 0x8de0
leaq -0xd0(%rbp), %rdi
callq 0x8de0
leaq -0x70(%rbp), %rdi
callq 0x8e60
leaq -0x30(%rbp), %rdi
callq 0x8e00
movl -0x4(%rbp), %eax
addq $0x1280, %rsp           # imm = 0x1280
popq %rbp
retq
leaq -0x840(%rbp), %rdi
callq 0x84c0
leaq -0x7c8(%rbp), %rdi
callq 0x84c0
leaq -0x788(%rbp), %rdi
callq 0x8dc0
leaq -0x760(%rbp), %rdi
callq 0x8de0
leaq -0x738(%rbp), %rdi
callq 0x8dc0
leaq -0x710(%rbp), %rdi
callq 0x8e00
leaq -0x6e0(%rbp), %rdi
callq 0x8e20
leaq -0x6a0(%rbp), %rdi
callq 0x8e20
leaq -0x660(%rbp), %rdi
callq 0x8e20
leaq -0x630(%rbp), %rdi
callq 0x8de0
leaq -0x608(%rbp), %rdi
callq 0x8de0
leaq -0x5e0(%rbp), %rdi
callq 0x8de0
leaq -0x5b8(%rbp), %rdi
callq 0x8de0
leaq -0x590(%rbp), %rdi
callq 0x8de0
leaq -0x568(%rbp), %rdi
callq 0x8e00
leaq -0x548(%rbp), %rdi
callq 0x8de0
leaq -0x520(%rbp), %rdi
callq 0x8de0
leaq -0x4f8(%rbp), %rdi
callq 0x8de0
leaq -0x4d0(%rbp), %rdi
callq 0x8de0
leaq -0x4a8(%rbp), %rdi
callq 0x8de0
leaq -0x480(%rbp), %rdi
callq 0x8de0
leaq -0x458(%rbp), %rdi
callq 0x8de0
leaq -0x430(%rbp), %rdi
callq 0x8de0
leaq -0x408(%rbp), %rdi
callq 0x8e00
leaq -0x3e8(%rbp), %rdi
callq 0x8dc0
leaq -0x3c0(%rbp), %rdi
callq 0x8de0
leaq -0x398(%rbp), %rdi
callq 0x8de0
leaq -0x370(%rbp), %rdi
callq 0x8de0
leaq -0x348(%rbp), %rdi
callq 0x8de0
leaq -0x320(%rbp), %rdi
callq 0x8de0
leaq -0x2f8(%rbp), %rdi
callq 0x8de0
leaq -0x2d0(%rbp), %rdi
callq 0x8e40
leaq -0x2a8(%rbp), %rdi
callq 0x8de0
leaq -0x280(%rbp), %rdi
callq 0x8dc0
leaq -0x248(%rbp), %rdi
callq 0x8e20
leaq -0x218(%rbp), %rdi
callq 0x8de0
leaq -0x1f0(%rbp), %rdi
callq 0x8de0
leaq -0x1c8(%rbp), %rdi
callq 0x8de0
leaq -0x1a0(%rbp), %rdi
callq 0x8e00
leaq -0x158(%rbp), %rdi
callq 0x8e60
leaq -0x118(%rbp), %rdi
callq 0x8e00
leaq -0xf8(%rbp), %rdi
callq 0x8de0
leaq -0xd0(%rbp), %rdi
callq 0x8de0
leaq -0x70(%rbp), %rdi
callq 0x8e60
leaq -0x30(%rbp), %rdi
callq 0x8e00
movq -0xa0(%rbp), %rdi
callq 0x3440
nopl (%rax)