From f364b956fcfacfb23badd77f5899ff9c42e1d2d2 Mon Sep 17 00:00:00 2001
From: Bryan Smith <bryan.smith.dev@gmail.com>
Date: Mon, 4 Feb 2019 18:55:06 -0500
Subject: [PATCH 01/84] Add [total_toolchanges] placeholder for filename and
 custom gcode sections.

---
 src/libslic3r/GCode.cpp | 8 ++++++++
 src/libslic3r/Print.cpp | 3 ++-
 src/libslic3r/Print.hpp | 2 ++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index c42669de0..6dc63c249 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -726,6 +726,12 @@ void GCode::_do_export(Print &print, FILE *file)
             _writeln(file, GCodeTimeEstimator::Silent_First_M73_Output_Placeholder_Tag);
     }
 
+	//Hold total number of print toolchanges
+    int          m_total_toolchanges = 1;
+    m_total_toolchanges = print.wipe_tower_data().number_of_toolchanges;
+    //Check for negative toolchanges (probably single extruder mode) and set to 1.
+    m_total_toolchanges = (print.wipe_tower_data().number_of_toolchanges < 0) ? 1 : print.wipe_tower_data().number_of_toolchanges;
+
     // Prepare the helper object for replacing placeholders in custom G-code and output filename.
     m_placeholder_parser = print.placeholder_parser();
     m_placeholder_parser.update_timestamp();
@@ -788,6 +794,7 @@ void GCode::_do_export(Print &print, FILE *file)
     // For the start / end G-code to do the priming and final filament pull in case there is no wipe tower provided.
     m_placeholder_parser.set("has_wipe_tower", has_wipe_tower);
     m_placeholder_parser.set("has_single_extruder_multi_material_priming", has_wipe_tower && print.config().single_extruder_multi_material_priming);
+    m_placeholder_parser.set("total_toolchanges", m_total_toolchanges);
     std::string start_gcode = this->placeholder_parser_process("start_gcode", print.config().start_gcode.value, initial_extruder_id);
     // Set bed temperature if the start G-code does not contain any bed temp control G-codes.
     this->_print_first_layer_bed_temperature(file, print, start_gcode, initial_extruder_id, true);
@@ -1057,6 +1064,7 @@ void GCode::_do_export(Print &print, FILE *file)
     print.m_print_statistics.clear();
     print.m_print_statistics.estimated_normal_print_time = m_normal_time_estimator.get_time_dhms();
     print.m_print_statistics.estimated_silent_print_time = m_silent_time_estimator_enabled ? m_silent_time_estimator.get_time_dhms() : "N/A";
+    print.m_print_statistics.total_toolchanges = m_total_toolchanges;
     std::vector<Extruder> extruders = m_writer.extruders();
     if (! extruders.empty()) {
         std::pair<std::string, unsigned int> out_filament_used_mm ("; filament used [mm] = ", 0);
diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp
index f9129f15a..69b4d8129 100644
--- a/src/libslic3r/Print.cpp
+++ b/src/libslic3r/Print.cpp
@@ -1956,6 +1956,7 @@ DynamicConfig PrintStatistics::config() const
     config.set_key_value("used_filament",             new ConfigOptionFloat (this->total_used_filament / 1000.));
     config.set_key_value("extruded_volume",           new ConfigOptionFloat (this->total_extruded_volume));
     config.set_key_value("total_cost",                new ConfigOptionFloat (this->total_cost));
+    config.set_key_value("total_toolchanges",         new ConfigOptionInt(this->total_toolchanges));
     config.set_key_value("total_weight",              new ConfigOptionFloat (this->total_weight));
     config.set_key_value("total_wipe_tower_cost",     new ConfigOptionFloat (this->total_wipe_tower_cost));
     config.set_key_value("total_wipe_tower_filament", new ConfigOptionFloat (this->total_wipe_tower_filament));
@@ -1968,7 +1969,7 @@ DynamicConfig PrintStatistics::placeholders()
     for (const std::string &key : { 
         "print_time", "normal_print_time", "silent_print_time", 
         "used_filament", "extruded_volume", "total_cost", "total_weight", 
-        "total_wipe_tower_cost", "total_wipe_tower_filament"})
+        "total_toolchanges", "total_wipe_tower_cost", "total_wipe_tower_filament"})
         config.set_key_value(key, new ConfigOptionString(std::string("{") + key + "}"));
     return config;
 }
diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp
index 53d6d692d..2326366a0 100644
--- a/src/libslic3r/Print.hpp
+++ b/src/libslic3r/Print.hpp
@@ -241,6 +241,7 @@ struct PrintStatistics
     double                          total_used_filament;
     double                          total_extruded_volume;
     double                          total_cost;
+    int                             total_toolchanges;
     double                          total_weight;
     double                          total_wipe_tower_cost;
     double                          total_wipe_tower_filament;
@@ -259,6 +260,7 @@ struct PrintStatistics
         total_used_filament    = 0.;
         total_extruded_volume  = 0.;
         total_cost             = 0.;
+        total_toolchanges      = 0;
         total_weight           = 0.;
         total_wipe_tower_cost  = 0.;
         total_wipe_tower_filament = 0.;

From 0ea6f895c5edcd1da1e7a5c6baaecf74f9b9890c Mon Sep 17 00:00:00 2001
From: Bryan Smith <bryan.smith.dev@gmail.com>
Date: Mon, 4 Feb 2019 20:52:38 -0500
Subject: [PATCH 02/84] Write the total toolchanges statistic to the end of the
 GCODE file like the other statistics.

---
 src/libslic3r/GCode.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 6dc63c249..00a4e801a 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -1114,6 +1114,7 @@ void GCode::_do_export(Print &print, FILE *file)
     }
     _write_format(file, "; total filament used [g] = %.1lf\n", print.m_print_statistics.total_weight);
     _write_format(file, "; total filament cost = %.1lf\n", print.m_print_statistics.total_cost);
+    _write_format(file, "; total toolchanges = %i\n", print.m_print_statistics.total_toolchanges);
     _write_format(file, "; estimated printing time (normal mode) = %s\n", m_normal_time_estimator.get_time_dhms().c_str());
     if (m_silent_time_estimator_enabled)
         _write_format(file, "; estimated printing time (silent mode) = %s\n", m_silent_time_estimator.get_time_dhms().c_str());

From 86fbb9a095e30ce0f6fc998cf1b812e716ac7871 Mon Sep 17 00:00:00 2001
From: supermerill <merill@fr.fr>
Date: Wed, 23 Jan 2019 10:08:42 +0100
Subject: [PATCH 03/84] gyroid & 3Dhoneycomb: now 'connected lines' follow the
 perimeters

---
 src/libslic3r/Fill/Fill3DHoneycomb.cpp |  59 +++--
 src/libslic3r/Fill/FillBase.cpp        | 287 +++++++++++++++++++++++++
 src/libslic3r/Fill/FillBase.hpp        |   2 +
 src/libslic3r/Fill/FillGyroid.cpp      |  99 +++++----
 src/libslic3r/Point.hpp                |   7 +
 5 files changed, 377 insertions(+), 77 deletions(-)

diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.cpp b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
index 6a37e4369..7da18d9e3 100644
--- a/src/libslic3r/Fill/Fill3DHoneycomb.cpp
+++ b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
@@ -161,43 +161,38 @@ void Fill3DHoneycomb::_fill_surface_single(
     for (Polylines::iterator it = polylines.begin(); it != polylines.end(); ++ it)
         it->translate(bb.min(0), bb.min(1));
 
-    // clip pattern to boundaries
-    polylines = intersection_pl(polylines, (Polygons)expolygon);
-
-    // connect lines
-    if (! params.dont_connect && ! polylines.empty()) { // prevent calling leftmost_point() on empty collections
-        ExPolygon expolygon_off;
-        {
-            ExPolygons expolygons_off = offset_ex(expolygon, SCALED_EPSILON);
-            if (! expolygons_off.empty()) {
-                // When expanding a polygon, the number of islands could only shrink. Therefore the offset_ex shall generate exactly one expanded island for one input island.
-                assert(expolygons_off.size() == 1);
-                std::swap(expolygon_off, expolygons_off.front());
+    // clip pattern to boundaries, keeping the polyline order & ordering the fragment to be able to join them easily
+    Polylines polylines_chained;
+    for (size_t idx_polyline = 0; idx_polyline < polylines.size(); ++idx_polyline) {
+        Polyline &poly_to_cut = polylines[idx_polyline];
+        Polylines polylines_to_sort = intersection_pl(Polylines() = { poly_to_cut }, (Polygons)expolygon);
+        for (Polyline &polyline : polylines_to_sort) {
+            //TODO: replace by closest_index_point()
+            if (poly_to_cut.points.front().distance_to_square(polyline.points.front()) > poly_to_cut.points.front().distance_to_square(polyline.points.back())) {
+                polyline.reverse();
             }
         }
-        Polylines chained = PolylineCollection::chained_path_from(
-            std::move(polylines), 
-            PolylineCollection::leftmost_point(polylines), false); // reverse allowed
-        bool first = true;
-        for (Polylines::iterator it_polyline = chained.begin(); it_polyline != chained.end(); ++ it_polyline) {
-            if (! first) {
-                // Try to connect the lines.
-                Points &pts_end = polylines_out.back().points;
-                const Point &first_point = it_polyline->points.front();
-                const Point &last_point = pts_end.back();
-                // TODO: we should also check that both points are on a fill_boundary to avoid 
-                // connecting paths on the boundaries of internal regions
-                if ((last_point - first_point).cast<double>().norm() <= 1.5 * distance && 
-                    expolygon_off.contains(Line(last_point, first_point))) {
-                    // Append the polyline.
-                    pts_end.insert(pts_end.end(), it_polyline->points.begin(), it_polyline->points.end());
-                    continue;
+        if (polylines_to_sort.size() > 1) {
+            Point nearest = poly_to_cut.points.front();
+            //Bubble sort
+            for (size_t idx_sort = polylines_to_sort.size() - 1; idx_sort > 0; idx_sort--) {
+                for (size_t idx_bubble = 0; idx_bubble < idx_sort; idx_bubble++) {
+                    if (polylines_to_sort[idx_bubble + 1].points.front().distance_to_square(nearest) < polylines_to_sort[idx_bubble].points.front().distance_to_square(nearest)) {
+                        iter_swap(polylines_to_sort.begin() + idx_bubble, polylines_to_sort.begin() + idx_bubble + 1);
+                    }
                 }
             }
-            // The lines cannot be connected.
-            polylines_out.emplace_back(std::move(*it_polyline));
-            first = false;
         }
+        polylines_chained.insert(polylines_chained.end(), polylines_to_sort.begin(), polylines_to_sort.end());
+    }
+    // connect lines if needed
+    if (!polylines_chained.empty()) {
+        if (params.dont_connect) {
+            polylines_out.insert(polylines_out.end(), polylines_chained.begin(), polylines_chained.end());
+        } else {
+            this->connect_infill(polylines_chained, expolygon, polylines_out);
+        }
+
     }
 }
 
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 7a99e84f7..df32ff179 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -130,4 +130,291 @@ std::pair<float, Point> Fill::_infill_direction(const Surface *surface) const
     return std::pair<float, Point>(out_angle, out_shift);
 }
 
+
+
+
+/// cut poly between poly.point[idx_1] & poly.point[idx_1+1]
+/// add p1+-width to one part and p2+-width to the other one.
+/// add the "new" polyline to polylines (to part cut from poly)
+/// p1 & p2 have to be between poly.point[idx_1] & poly.point[idx_1+1]
+/// if idx_1 is ==0 or == size-1, then we don't need to create a new polyline.
+void cut_polyline(Polyline &poly, Polylines &polylines, size_t idx_1, Point p1, Point p2) {
+    //reorder points
+    if (p1.distance_to_square(poly.points[idx_1]) > p2.distance_to_square(poly.points[idx_1])) {
+        Point temp = p2;
+        p2 = p1;
+        p1 = temp;
+    }
+    if (idx_1 == 0) {
+        poly.points.insert(poly.points.begin(), p2);
+    } else if (idx_1 == poly.points.size() - 1) {
+        poly.points.push_back(p1);
+    } else {
+        // create new polyline
+        Polyline new_poly;
+        //put points in new_poly
+        new_poly.points.push_back(p2);
+        new_poly.points.insert(new_poly.points.end(), poly.points.begin() + idx_1 + 1, poly.points.end());
+        //erase&put points in poly
+        poly.points.erase(poly.points.begin() + idx_1 + 1, poly.points.end());
+        poly.points.push_back(p1);
+        polylines.emplace_back(new_poly);
+    }
+}
+
+/// the poly is like a polygon but with first_point != last_point (already removed)
+void cut_polygon(Polyline &poly, size_t idx_1, Point p1, Point p2) {
+    //reorder points
+    if (p1.distance_to_square(poly.points[idx_1]) > p2.distance_to_square(poly.points[idx_1])) {
+        Point temp = p2;
+        p2 = p1;
+        p1 = temp;
+    }
+    //check if we need to rotate before cutting
+    if (idx_1 != poly.size() - 1) {
+        //put points in new_poly 
+        poly.points.insert(poly.points.end(), poly.points.begin(), poly.points.begin() + idx_1 + 1);
+        poly.points.erase(poly.points.begin(), poly.points.begin() + idx_1 + 1);
+    }
+    //put points in poly
+    poly.points.push_back(p1);
+    poly.points.insert(poly.points.begin(), p2);
+}
+
+/// check if the polyline from pts_to_check may be at 'width' distance of a point in polylines_blocker
+/// it use equally_spaced_points with width/2 precision, so don't worry with pts_to_check number of points.
+/// it use the given polylines_blocker points, be sure to put enough of them to be reliable.
+/// complexity : N(pts_to_check.equally_spaced_points(width / 2)) x N(polylines_blocker.points)
+bool collision(const Points &pts_to_check, const Polylines &polylines_blocker, const coordf_t width) {
+    //check if it's not too close to a polyline
+    coordf_t min_dist = width * width * 0.9 - SCALED_EPSILON;
+    Polyline better_polylines(pts_to_check);
+    Points better_pts = better_polylines.equally_spaced_points(width / 2);
+    for (const Point &p : better_pts) {
+        for (const Polyline &poly2 : polylines_blocker) {
+            for (const Point &p2 : poly2.points) {
+                if (p.distance_to_square(p2) < min_dist) {
+                    return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+/// Try to find a path inside polylines that allow to go from p1 to p2.
+/// width if the width of the extrusion
+/// polylines_blockers are the array of polylines to check if the path isn't blocked by something.
+/// complexity: N(polylines.points) + a collision check after that if we finded a path: N(2(p2-p1)/width) x N(polylines_blocker.points)
+Points getFrontier(Polylines &polylines, const Point& p1, const Point& p2, const coord_t width, const Polylines &polylines_blockers) {
+    for (size_t idx_poly = 0; idx_poly < polylines.size(); ++idx_poly) {
+        Polyline &poly = polylines[idx_poly];
+        if (poly.size() <= 1) continue;
+
+        //loop?
+        if (poly.first_point() == poly.last_point()) {
+            //polygon : try to find a line for p1 & p2.
+            size_t idx_11, idx_12, idx_21, idx_22;
+            idx_11 = poly.closest_point_index(p1);
+            idx_12 = idx_11;
+            if (Line(poly.points[idx_11], poly.points[(idx_11 + 1) % (poly.points.size() - 1)]).distance_to(p1) < SCALED_EPSILON) {
+                idx_12 = (idx_11 + 1) % (poly.points.size() - 1);
+            } else if (Line(poly.points[(idx_11 > 0) ? (idx_11 - 1) : (poly.points.size() - 2)], poly.points[idx_11]).distance_to(p1) < SCALED_EPSILON) {
+                idx_11 = (idx_11 > 0) ? (idx_11 - 1) : (poly.points.size() - 2);
+            } else {
+                continue;
+            }
+            idx_21 = poly.closest_point_index(p2);
+            idx_22 = idx_21;
+            if (Line(poly.points[idx_21], poly.points[(idx_21 + 1) % (poly.points.size() - 1)]).distance_to(p2) < SCALED_EPSILON) {
+                idx_22 = (idx_21 + 1) % (poly.points.size() - 1);
+            } else if (Line(poly.points[(idx_21 > 0) ? (idx_21 - 1) : (poly.points.size() - 2)], poly.points[idx_21]).distance_to(p2) < SCALED_EPSILON) {
+                idx_21 = (idx_21 > 0) ? (idx_21 - 1) : (poly.points.size() - 2);
+            } else {
+                continue;
+            }
+
+
+            //edge case: on the same line
+            if (idx_11 == idx_21 && idx_12 == idx_22) {
+                if (collision(Points() = { p1, p2 }, polylines_blockers, width)) return Points();
+                //break loop
+                poly.points.erase(poly.points.end() - 1);
+                cut_polygon(poly, idx_11, p1, p2);
+                return Points() = { Line(p1, p2).midpoint() };
+            }
+
+            //compute distance & array for the ++ path
+            Points ret_1_to_2;
+            double dist_1_to_2 = p1.distance_to(poly.points[idx_12]);
+            ret_1_to_2.push_back(poly.points[idx_12]);
+            size_t max = idx_12 <= idx_21 ? idx_21 : poly.points.size() - 2;
+            for (size_t i = idx_12 + 1; i < max; i++) {
+                dist_1_to_2 += poly.points[i - 1].distance_to(poly.points[i]);
+                ret_1_to_2.push_back(poly.points[i]);
+            }
+            if (idx_12 > idx_21) {
+                dist_1_to_2 += poly.points.back().distance_to(poly.points.front());
+                ret_1_to_2.push_back(poly.points[0]);
+                for (size_t i = 1; i <= idx_21; i++) {
+                    dist_1_to_2 += poly.points[i - 1].distance_to(poly.points[i]);
+                    ret_1_to_2.push_back(poly.points[i]);
+                }
+            }
+            dist_1_to_2 += p2.distance_to(poly.points[idx_21]);
+
+            //compute distance & array for the -- path
+            Points ret_2_to_1;
+            double dist_2_to_1 = p1.distance_to(poly.points[idx_11]);
+            ret_2_to_1.push_back(poly.points[idx_11]);
+            size_t min = idx_22 <= idx_11 ? idx_22 : 0;
+            for (size_t i = idx_11; i > min; i--) {
+                dist_2_to_1 += poly.points[i - 1].distance_to(poly.points[i]);
+                ret_2_to_1.push_back(poly.points[i - 1]);
+            }
+            if (idx_22 > idx_11) {
+                dist_2_to_1 += poly.points.back().distance_to(poly.points.front());
+                ret_2_to_1.push_back(poly.points[poly.points.size() - 1]);
+                for (size_t i = poly.points.size() - 2; i > idx_22; i--) {
+                    dist_2_to_1 += poly.points[i - 1].distance_to(poly.points[i]);
+                    ret_2_to_1.push_back(poly.points[i - 1]);
+                }
+            }
+            dist_2_to_1 += p2.distance_to(poly.points[idx_22]);
+
+            //choose between the two direction (keep the short one)
+            if (dist_1_to_2 < dist_2_to_1) {
+                if (collision(ret_1_to_2, polylines_blockers, width)) return Points();
+                //break loop
+                poly.points.erase(poly.points.end() - 1);
+                //remove points
+                if (idx_12 <= idx_21) {
+                    poly.points.erase(poly.points.begin() + idx_12, poly.points.begin() + idx_21 + 1);
+                    cut_polygon(poly, idx_11, p1, p2);
+                } else {
+                    poly.points.erase(poly.points.begin() + idx_12, poly.points.end());
+                    poly.points.erase(poly.points.begin(), poly.points.begin() + idx_21);
+                    cut_polygon(poly, poly.points.size() - 1, p1, p2);
+                }
+                return ret_1_to_2;
+            } else {
+                if (collision(ret_2_to_1, polylines_blockers, width)) return Points();
+                //break loop
+                poly.points.erase(poly.points.end() - 1);
+                //remove points
+                if (idx_22 <= idx_11) {
+                    poly.points.erase(poly.points.begin() + idx_22, poly.points.begin() + idx_11 + 1);
+                    cut_polygon(poly, idx_21, p1, p2);
+                } else {
+                    poly.points.erase(poly.points.begin() + idx_22, poly.points.end());
+                    poly.points.erase(poly.points.begin(), poly.points.begin() + idx_11);
+                    cut_polygon(poly, poly.points.size() - 1, p1, p2);
+                }
+                return ret_2_to_1;
+            }
+        } else {
+            //polyline : try to find a line for p1 & p2.
+            size_t idx_1, idx_2;
+            idx_1 = poly.closest_point_index(p1);
+            if (idx_1 < poly.points.size() - 1 && Line(poly.points[idx_1], poly.points[idx_1 + 1]).distance_to(p1) < SCALED_EPSILON) {
+            } else if (idx_1 > 0 && Line(poly.points[idx_1 - 1], poly.points[idx_1]).distance_to(p1) < SCALED_EPSILON) {
+                idx_1 = idx_1 - 1;
+            } else {
+                continue;
+            }
+            idx_2 = poly.closest_point_index(p2);
+            if (idx_2 < poly.points.size() - 1 && Line(poly.points[idx_2], poly.points[idx_2 + 1]).distance_to(p2) < SCALED_EPSILON) {
+            } else if (idx_2 > 0 && Line(poly.points[idx_2 - 1], poly.points[idx_2]).distance_to(p2) < SCALED_EPSILON) {
+                idx_2 = idx_2 - 1;
+            } else {
+                continue;
+            }
+
+            //edge case: on the same line
+            if (idx_1 == idx_2) {
+                if (collision(Points() = { p1, p2 }, polylines_blockers, width)) return Points();
+                cut_polyline(poly, polylines, idx_1, p1, p2);
+                return Points() = { Line(p1, p2).midpoint() };
+            }
+
+            //create ret array
+            size_t first_idx = idx_1;
+            size_t last_idx = idx_2 + 1;
+            if (idx_1 > idx_2) {
+                first_idx = idx_2;
+                last_idx = idx_1 + 1;
+            }
+            Points p_ret;
+            p_ret.insert(p_ret.end(), poly.points.begin() + first_idx + 1, poly.points.begin() + last_idx);
+            if (collision(p_ret, polylines_blockers, width)) return Points();
+            //cut polyline
+            poly.points.erase(poly.points.begin() + first_idx + 1, poly.points.begin() + last_idx);
+            cut_polyline(poly, polylines, first_idx, p1, p2);
+            //order the returned array to be p1->p2
+            if (idx_1 > idx_2) {
+                std::reverse(p_ret.begin(), p_ret.end());
+            }
+            return p_ret;
+        }
+
+    }
+
+    return Points();
+}
+
+/// Connect the infill_ordered polylines, in this order, from the back point to the next front point.
+/// It uses only the boundary polygons to do so, and can't pass two times at the same place.
+/// It avoid passing over the infill_ordered's polylines (preventing local over-extrusion).
+/// return the connected polylines in polylines_out. Can output polygons (stored as polylines with first_point = last_point).
+/// complexity: worst: N(infill_ordered.points) x N(boundary.points)
+///             typical: N(infill_ordered) x ( N(boundary.points) + N(infill_ordered.points) )
+void Fill::connect_infill(const Polylines &infill_ordered, const ExPolygon &boundary, Polylines &polylines_out) {
+
+    //TODO: fallback to the quick & dirty old algorithm when n(points) is too high.
+    Polylines polylines_frontier = to_polylines(((Polygons)boundary));
+
+    Polylines polylines_blocker;
+    coord_t clip_size = scale_(this->spacing) * 2;
+    for (const Polyline &polyline : infill_ordered) {
+        if (polyline.length() > 1.8 * clip_size) {
+            polylines_blocker.push_back(polyline);
+            polylines_blocker.back().clip_end(clip_size);
+            polylines_blocker.back().clip_start(clip_size);
+        }
+    }
+
+
+    Polylines polylines_connected;
+    bool first = true;
+    for (const Polyline &polyline : infill_ordered) {
+        if (!first) {
+            // Try to connect the lines.
+            Points &pts_end = polylines_connected.back().points;
+            const Point &first_point = polyline.points.front();
+            const Point &last_point = pts_end.back();
+
+            Points pts = getFrontier(polylines_frontier, last_point, first_point, scale_(this->spacing), polylines_blocker);
+            if (!pts.empty()) {
+                pts_end.insert(pts_end.end(), pts.begin(), pts.end());
+                pts_end.insert(pts_end.end(), polyline.points.begin(), polyline.points.end());
+                continue;
+            }
+        }
+        // The lines cannot be connected.
+        polylines_connected.emplace_back(std::move(polyline));
+
+        first = false;
+    }
+
+    //try to create some loops if possible
+    for (Polyline &polyline : polylines_connected) {
+        Points pts = getFrontier(polylines_frontier, polyline.last_point(), polyline.first_point(), scale_(this->spacing), polylines_blocker);
+        if (!pts.empty()) {
+            polyline.points.insert(polyline.points.end(), pts.begin(), pts.end());
+            polyline.points.insert(polyline.points.begin(), polyline.points.back());
+        }
+        polylines_out.emplace_back(polyline);
+    }
+}
+
 } // namespace Slic3r
diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp
index 8bf6c3689..b7f6b5b10 100644
--- a/src/libslic3r/Fill/FillBase.hpp
+++ b/src/libslic3r/Fill/FillBase.hpp
@@ -109,6 +109,8 @@ protected:
 
     virtual std::pair<float, Point> _infill_direction(const Surface *surface) const;
 
+    void connect_infill(const Polylines &infill_ordered, const ExPolygon &boundary, Polylines &polylines_out);
+
 public:
     static coord_t  _adjust_solid_spacing(const coord_t width, const coord_t distance);
 
diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index 04319bb26..9972e210c 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -109,16 +109,20 @@ static Polylines make_gyroid_waves(double gridZ, double density_adjusted, double
         std::swap(width,height);
     }
 
-    std::vector<Vec2d> one_period = make_one_period(width, scaleFactor, z_cos, z_sin, vertical, flip); // creates one period of the waves, so it doesn't have to be recalculated all the time
+    std::vector<Vec2d> one_period_odd = make_one_period(width, scaleFactor, z_cos, z_sin, vertical, flip); // creates one period of the waves, so it doesn't have to be recalculated all the time
+    flip = !flip;                                                                   // even polylines are a bit shifted
+    std::vector<Vec2d> one_period_even = make_one_period(width, scaleFactor, z_cos, z_sin, vertical, flip);
     Polylines result;
 
-    for (double y0 = lower_bound; y0 < upper_bound+EPSILON; y0 += 2*M_PI)           // creates odd polylines
-            result.emplace_back(make_wave(one_period, width, height, y0, scaleFactor, z_cos, z_sin, vertical));
-
-    flip = !flip;                                                                   // even polylines are a bit shifted
-    one_period = make_one_period(width, scaleFactor, z_cos, z_sin, vertical, flip); // updates the one period sample
-    for (double y0 = lower_bound + M_PI; y0 < upper_bound+EPSILON; y0 += 2*M_PI)    // creates even polylines
-            result.emplace_back(make_wave(one_period, width, height, y0, scaleFactor, z_cos, z_sin, vertical));
+    for (double y0 = lower_bound; y0 < upper_bound + EPSILON; y0 += M_PI) {
+        // creates odd polylines
+        result.emplace_back(make_wave(one_period_odd, width, height, y0, scaleFactor, z_cos, z_sin, vertical));
+        // creates even polylines
+        y0 += M_PI;
+        if (y0 < upper_bound + EPSILON) {
+            result.emplace_back(make_wave(one_period_even, width, height, y0, scaleFactor, z_cos, z_sin, vertical));
+        }
+    }
 
     return result;
 }
@@ -141,7 +145,7 @@ void FillGyroid::_fill_surface_single(
     bb.merge(_align_to_grid(bb.min, Point(2.*M_PI*distance, 2.*M_PI*distance)));
 
     // generate pattern
-    Polylines   polylines = make_gyroid_waves(
+    Polylines polylines_square = make_gyroid_waves(
         scale_(this->z),
         density_adjusted,
         this->spacing,
@@ -149,46 +153,51 @@ void FillGyroid::_fill_surface_single(
         ceil(bb.size()(1) / distance) + 1.);
     
     // move pattern in place
-    for (Polyline &polyline : polylines)
+    for (Polyline &polyline : polylines_square)
         polyline.translate(bb.min(0), bb.min(1));
 
-    // clip pattern to boundaries
-    polylines = intersection_pl(polylines, (Polygons)expolygon);
-
-    // connect lines
-    if (! params.dont_connect && ! polylines.empty()) { // prevent calling leftmost_point() on empty collections
-        ExPolygon expolygon_off;
-        {
-            ExPolygons expolygons_off = offset_ex(expolygon, (float)SCALED_EPSILON);
-            if (! expolygons_off.empty()) {
-                // When expanding a polygon, the number of islands could only shrink. Therefore the offset_ex shall generate exactly one expanded island for one input island.
-                assert(expolygons_off.size() == 1);
-                std::swap(expolygon_off, expolygons_off.front());
-            }
-        }
-        Polylines chained = PolylineCollection::chained_path_from(
-            std::move(polylines), 
-            PolylineCollection::leftmost_point(polylines), false); // reverse allowed
-        bool first = true;
-        for (Polyline &polyline : chained) {
-            if (! first) {
-                // Try to connect the lines.
-                Points &pts_end = polylines_out.back().points;
-                const Point &first_point = polyline.points.front();
-                const Point &last_point = pts_end.back();
-                // TODO: we should also check that both points are on a fill_boundary to avoid 
-                // connecting paths on the boundaries of internal regions
-                // TODO: avoid crossing current infill path
-                if ((last_point - first_point).cast<double>().norm() <= 5 * distance && 
-                    expolygon_off.contains(Line(last_point, first_point))) {
-                    // Append the polyline.
-                    pts_end.insert(pts_end.end(), polyline.points.begin(), polyline.points.end());
-                    continue;
+    // clip pattern to boundaries, keeping the polyline order & ordering the fragment to be able to join them easily
+    //Polylines polylines = intersection_pl(polylines_square, (Polygons)expolygon);
+    Polylines polylines_chained;
+    for (size_t idx_polyline = 0; idx_polyline < polylines_square.size(); ++idx_polyline) {
+        Polyline &poly_to_cut = polylines_square[idx_polyline];
+        Polylines polylines_to_sort = intersection_pl(Polylines() = { poly_to_cut }, (Polygons)expolygon);
+        for (Polyline &polyline : polylines_to_sort) {
+            //TODO: replace by closest_index_point()
+            if (idx_polyline % 2 == 0) {
+                if (poly_to_cut.points.front().distance_to_square(polyline.points.front()) > poly_to_cut.points.front().distance_to_square(polyline.points.back())) {
+                    polyline.reverse();
+                }
+            } else {
+                if (poly_to_cut.points.back().distance_to_square(polyline.points.front()) > poly_to_cut.points.back().distance_to_square(polyline.points.back())) {
+                    polyline.reverse();
                 }
             }
-            // The lines cannot be connected.
-            polylines_out.emplace_back(std::move(polyline));
-            first = false;
+        }
+        if (polylines_to_sort.size() > 1) {
+            Point nearest = poly_to_cut.points.front();
+            if (idx_polyline % 2 != 0) {
+                nearest = poly_to_cut.points.back();
+            }
+            //Bubble sort
+            for (size_t idx_sort = polylines_to_sort.size() - 1; idx_sort > 0; idx_sort--) {
+                for (size_t idx_bubble = 0; idx_bubble < idx_sort; idx_bubble++) {
+                    if (polylines_to_sort[idx_bubble + 1].points.front().distance_to_square(nearest) < polylines_to_sort[idx_bubble].points.front().distance_to_square(nearest)) {
+                        iter_swap(polylines_to_sort.begin() + idx_bubble, polylines_to_sort.begin() + idx_bubble + 1);
+                    }
+                }
+            }
+        }
+        polylines_chained.insert(polylines_chained.end(), polylines_to_sort.begin(), polylines_to_sort.end());
+    }
+
+    if (!polylines_chained.empty()) {
+
+        // connect lines
+        if (params.dont_connect) {
+            polylines_out.insert(polylines_out.end(), polylines_chained.begin(), polylines_chained.end());
+        } else {
+            this->connect_infill(polylines_chained, expolygon, polylines_out);
         }
     }
 }
diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp
index 994f45e59..290914771 100644
--- a/src/libslic3r/Point.hpp
+++ b/src/libslic3r/Point.hpp
@@ -124,6 +124,13 @@ public:
     double ccw_angle(const Point &p1, const Point &p2) const;
     Point  projection_onto(const MultiPoint &poly) const;
     Point  projection_onto(const Line &line) const;
+
+    double distance_to(const Point &point) const { return (point - *this).cast<double>().norm(); }
+    double distance_to_square(const Point &point) const {
+        double dx = (point.x() - this->x());
+        double dy = (point.y() - this->y());
+        return dx*dx + dy*dy;
+    }
 };
 
 namespace int128 {

From 19df45c39deebbb9a9a1c4ebaad7b9c0fcb2b231 Mon Sep 17 00:00:00 2001
From: supermerill <merill@fr.fr>
Date: Tue, 12 Feb 2019 00:13:44 +0100
Subject: [PATCH 04/84] bugfix gyroid & 3Dhoneycomb "connected lines"

---
 src/libslic3r/Fill/FillBase.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index df32ff179..d7e17698e 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -290,7 +290,9 @@ Points getFrontier(Polylines &polylines, const Point& p1, const Point& p2, const
                 //remove points
                 if (idx_12 <= idx_21) {
                     poly.points.erase(poly.points.begin() + idx_12, poly.points.begin() + idx_21 + 1);
-                    cut_polygon(poly, idx_11, p1, p2);
+                    if (idx_12 != 0) {
+                        cut_polygon(poly, idx_11, p1, p2);
+                    } //else : already cut at the good place
                 } else {
                     poly.points.erase(poly.points.begin() + idx_12, poly.points.end());
                     poly.points.erase(poly.points.begin(), poly.points.begin() + idx_21);
@@ -304,7 +306,9 @@ Points getFrontier(Polylines &polylines, const Point& p1, const Point& p2, const
                 //remove points
                 if (idx_22 <= idx_11) {
                     poly.points.erase(poly.points.begin() + idx_22, poly.points.begin() + idx_11 + 1);
-                    cut_polygon(poly, idx_21, p1, p2);
+                    if (idx_22 != 0) {
+                        cut_polygon(poly, idx_21, p1, p2);
+                    } //else : already cut at the good place
                 } else {
                     poly.points.erase(poly.points.begin() + idx_22, poly.points.end());
                     poly.points.erase(poly.points.begin(), poly.points.begin() + idx_11);

From b6936a46e3062c16d5aba0c3be526afb48ff7140 Mon Sep 17 00:00:00 2001
From: supermerill <merill@fr.fr>
Date: Fri, 8 Mar 2019 18:29:51 +0100
Subject: [PATCH 05/84] bugfix "connected lines" for gyroid & 3Dhoney

---
 src/libslic3r/Fill/Fill3DHoneycomb.cpp |   2 +-
 src/libslic3r/Fill/FillBase.cpp        | 120 ++++++++++++++++++++-----
 src/libslic3r/Fill/FillBase.hpp        |   2 +-
 src/libslic3r/Fill/FillGyroid.cpp      |  12 ++-
 4 files changed, 111 insertions(+), 25 deletions(-)

diff --git a/src/libslic3r/Fill/Fill3DHoneycomb.cpp b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
index 7da18d9e3..bb4958320 100644
--- a/src/libslic3r/Fill/Fill3DHoneycomb.cpp
+++ b/src/libslic3r/Fill/Fill3DHoneycomb.cpp
@@ -190,7 +190,7 @@ void Fill3DHoneycomb::_fill_surface_single(
         if (params.dont_connect) {
             polylines_out.insert(polylines_out.end(), polylines_chained.begin(), polylines_chained.end());
         } else {
-            this->connect_infill(polylines_chained, expolygon, polylines_out);
+            this->connect_infill(polylines_chained, expolygon, polylines_out, params);
         }
 
     }
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index d7e17698e..f9259eed9 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -145,10 +145,9 @@ void cut_polyline(Polyline &poly, Polylines &polylines, size_t idx_1, Point p1,
         p2 = p1;
         p1 = temp;
     }
-    if (idx_1 == 0) {
-        poly.points.insert(poly.points.begin(), p2);
-    } else if (idx_1 == poly.points.size() - 1) {
-        poly.points.push_back(p1);
+    if (idx_1 == poly.points.size() - 1) {
+        //shouldn't be possible.
+        poly.points.erase(poly.points.end() - 1);
     } else {
         // create new polyline
         Polyline new_poly;
@@ -158,7 +157,11 @@ void cut_polyline(Polyline &poly, Polylines &polylines, size_t idx_1, Point p1,
         //erase&put points in poly
         poly.points.erase(poly.points.begin() + idx_1 + 1, poly.points.end());
         poly.points.push_back(p1);
-        polylines.emplace_back(new_poly);
+        //safe test
+        if (poly.length() == 0)
+            poly.points = new_poly.points;
+        else
+            polylines.emplace_back(new_poly);
     }
 }
 
@@ -187,13 +190,13 @@ void cut_polygon(Polyline &poly, size_t idx_1, Point p1, Point p2) {
 /// complexity : N(pts_to_check.equally_spaced_points(width / 2)) x N(polylines_blocker.points)
 bool collision(const Points &pts_to_check, const Polylines &polylines_blocker, const coordf_t width) {
     //check if it's not too close to a polyline
-    coordf_t min_dist = width * width * 0.9 - SCALED_EPSILON;
+    coordf_t min_dist_square = width * width * 0.9 - SCALED_EPSILON;
     Polyline better_polylines(pts_to_check);
     Points better_pts = better_polylines.equally_spaced_points(width / 2);
     for (const Point &p : better_pts) {
         for (const Polyline &poly2 : polylines_blocker) {
             for (const Point &p2 : poly2.points) {
-                if (p.distance_to_square(p2) < min_dist) {
+                if (p.distance_to_square(p2) < min_dist_square) {
                     return true;
                 }
             }
@@ -206,7 +209,7 @@ bool collision(const Points &pts_to_check, const Polylines &polylines_blocker, c
 /// width if the width of the extrusion
 /// polylines_blockers are the array of polylines to check if the path isn't blocked by something.
 /// complexity: N(polylines.points) + a collision check after that if we finded a path: N(2(p2-p1)/width) x N(polylines_blocker.points)
-Points getFrontier(Polylines &polylines, const Point& p1, const Point& p2, const coord_t width, const Polylines &polylines_blockers) {
+Points getFrontier(Polylines &polylines, const Point& p1, const Point& p2, const coord_t width, const Polylines &polylines_blockers, coord_t max_size = -1) {
     for (size_t idx_poly = 0; idx_poly < polylines.size(); ++idx_poly) {
         Polyline &poly = polylines[idx_poly];
         if (poly.size() <= 1) continue;
@@ -248,7 +251,7 @@ Points getFrontier(Polylines &polylines, const Point& p1, const Point& p2, const
             Points ret_1_to_2;
             double dist_1_to_2 = p1.distance_to(poly.points[idx_12]);
             ret_1_to_2.push_back(poly.points[idx_12]);
-            size_t max = idx_12 <= idx_21 ? idx_21 : poly.points.size() - 2;
+            size_t max = idx_12 <= idx_21 ? idx_21+1 : poly.points.size();
             for (size_t i = idx_12 + 1; i < max; i++) {
                 dist_1_to_2 += poly.points[i - 1].distance_to(poly.points[i]);
                 ret_1_to_2.push_back(poly.points[i]);
@@ -275,13 +278,17 @@ Points getFrontier(Polylines &polylines, const Point& p1, const Point& p2, const
             if (idx_22 > idx_11) {
                 dist_2_to_1 += poly.points.back().distance_to(poly.points.front());
                 ret_2_to_1.push_back(poly.points[poly.points.size() - 1]);
-                for (size_t i = poly.points.size() - 2; i > idx_22; i--) {
+                for (size_t i = poly.points.size() - 1; i > idx_22; i--) {
                     dist_2_to_1 += poly.points[i - 1].distance_to(poly.points[i]);
                     ret_2_to_1.push_back(poly.points[i - 1]);
                 }
             }
             dist_2_to_1 += p2.distance_to(poly.points[idx_22]);
 
+            if (max_size < dist_2_to_1 && max_size < dist_1_to_2) {
+                return Points();
+            }
+
             //choose between the two direction (keep the short one)
             if (dist_1_to_2 < dist_2_to_1) {
                 if (collision(ret_1_to_2, polylines_blockers, width)) return Points();
@@ -350,6 +357,14 @@ Points getFrontier(Polylines &polylines, const Point& p1, const Point& p2, const
             }
             Points p_ret;
             p_ret.insert(p_ret.end(), poly.points.begin() + first_idx + 1, poly.points.begin() + last_idx);
+
+            coordf_t length = 0;
+            for (size_t i = 1; i < p_ret.size(); i++) length += p_ret[i - 1].distance_to(p_ret[i]);
+
+            if (max_size < length) {
+                return Points();
+            }
+
             if (collision(p_ret, polylines_blockers, width)) return Points();
             //cut polyline
             poly.points.erase(poly.points.begin() + first_idx + 1, poly.points.begin() + last_idx);
@@ -372,7 +387,7 @@ Points getFrontier(Polylines &polylines, const Point& p1, const Point& p2, const
 /// return the connected polylines in polylines_out. Can output polygons (stored as polylines with first_point = last_point).
 /// complexity: worst: N(infill_ordered.points) x N(boundary.points)
 ///             typical: N(infill_ordered) x ( N(boundary.points) + N(infill_ordered.points) )
-void Fill::connect_infill(const Polylines &infill_ordered, const ExPolygon &boundary, Polylines &polylines_out) {
+void Fill::connect_infill(const Polylines &infill_ordered, const ExPolygon &boundary, Polylines &polylines_out, const FillParams &params) {
 
     //TODO: fallback to the quick & dirty old algorithm when n(points) is too high.
     Polylines polylines_frontier = to_polylines(((Polygons)boundary));
@@ -380,26 +395,54 @@ void Fill::connect_infill(const Polylines &infill_ordered, const ExPolygon &boun
     Polylines polylines_blocker;
     coord_t clip_size = scale_(this->spacing) * 2;
     for (const Polyline &polyline : infill_ordered) {
-        if (polyline.length() > 1.8 * clip_size) {
+        if (polyline.length() > 2.01 * clip_size) {
             polylines_blocker.push_back(polyline);
             polylines_blocker.back().clip_end(clip_size);
             polylines_blocker.back().clip_start(clip_size);
         }
     }
 
+    //length between two lines
+    coordf_t ideal_length = (1 / params.density) * this->spacing;
 
-    Polylines polylines_connected;
+    Polylines polylines_connected_first;
     bool first = true;
     for (const Polyline &polyline : infill_ordered) {
         if (!first) {
             // Try to connect the lines.
-            Points &pts_end = polylines_connected.back().points;
-            const Point &first_point = polyline.points.front();
+            Points &pts_end = polylines_connected_first.back().points;
             const Point &last_point = pts_end.back();
+            const Point &first_point = polyline.points.front();
+            if (last_point.distance_to(first_point) < scale_(this->spacing) * 10) {
+                Points pts_frontier = getFrontier(polylines_frontier, last_point, first_point, scale_(this->spacing), polylines_blocker, (coord_t)scale_(ideal_length) * 2);
+                if (!pts_frontier.empty()) {
+                    // The lines can be connected.
+                    pts_end.insert(pts_end.end(), pts_frontier.begin(), pts_frontier.end());
+                    pts_end.insert(pts_end.end(), polyline.points.begin(), polyline.points.end());
+                    continue;
+                }
+            }
+        }
+        // The lines cannot be connected.
+        polylines_connected_first.emplace_back(std::move(polyline));
 
-            Points pts = getFrontier(polylines_frontier, last_point, first_point, scale_(this->spacing), polylines_blocker);
-            if (!pts.empty()) {
-                pts_end.insert(pts_end.end(), pts.begin(), pts.end());
+        first = false;
+    }
+
+    Polylines polylines_connected;
+    first = true;
+    for (const Polyline &polyline : polylines_connected_first) {
+        if (!first) {
+            // Try to connect the lines.
+            Points &pts_end = polylines_connected.back().points;
+            const Point &last_point = pts_end.back();
+            const Point &first_point = polyline.points.front();
+
+            Polylines before = polylines_frontier;
+            Points pts_frontier = getFrontier(polylines_frontier, last_point, first_point, scale_(this->spacing), polylines_blocker);
+            if (!pts_frontier.empty()) {
+                // The lines can be connected.
+                pts_end.insert(pts_end.end(), pts_frontier.begin(), pts_frontier.end());
                 pts_end.insert(pts_end.end(), polyline.points.begin(), polyline.points.end());
                 continue;
             }
@@ -410,11 +453,46 @@ void Fill::connect_infill(const Polylines &infill_ordered, const ExPolygon &boun
         first = false;
     }
 
+    //try to link to nearest point if possible
+    for (int idx1 = 0; idx1 < polylines_connected.size(); idx1++) {
+        size_t min_idx = 0;
+        coordf_t min_length = 0;
+        bool switch_id1 = false;
+        bool switch_id2 = false;
+        for (int idx2 = idx1 + 1; idx2 < polylines_connected.size(); idx2++) {
+            double last_first = polylines_connected[idx1].last_point().distance_to_square(polylines_connected[idx2].first_point());
+            double first_first = polylines_connected[idx1].first_point().distance_to_square(polylines_connected[idx2].first_point());
+            double first_last = polylines_connected[idx1].first_point().distance_to_square(polylines_connected[idx2].last_point());
+            double last_last = polylines_connected[idx1].last_point().distance_to_square(polylines_connected[idx2].last_point());
+            double min = std::min(std::min(last_first, last_last), std::min(first_first, first_last));
+            if (min < min_length || min_length == 0) {
+                min_idx = idx2;
+                switch_id1 = (std::min(last_first, last_last) > std::min(first_first, first_last));
+                switch_id2 = (std::min(last_first, first_first) > std::min(last_last, first_last));
+                min_length = min;
+            }
+        }
+        if (min_idx > idx1 && min_idx < polylines_connected.size()){
+            Points pts_frontier = getFrontier(polylines_frontier, 
+                switch_id1 ? polylines_connected[idx1].first_point() : polylines_connected[idx1].last_point(), 
+                switch_id2 ? polylines_connected[min_idx].last_point() : polylines_connected[min_idx].first_point(),
+                scale_(this->spacing), polylines_blocker);
+            if (!pts_frontier.empty()) {
+                if (switch_id1) polylines_connected[idx1].reverse();
+                if (switch_id2) polylines_connected[min_idx].reverse();
+                Points &pts_end = polylines_connected[idx1].points;
+                pts_end.insert(pts_end.end(), pts_frontier.begin(), pts_frontier.end());
+                pts_end.insert(pts_end.end(), polylines_connected[min_idx].points.begin(), polylines_connected[min_idx].points.end());
+                polylines_connected.erase(polylines_connected.begin() + min_idx);
+            }
+        }
+    }
+
     //try to create some loops if possible
     for (Polyline &polyline : polylines_connected) {
-        Points pts = getFrontier(polylines_frontier, polyline.last_point(), polyline.first_point(), scale_(this->spacing), polylines_blocker);
-        if (!pts.empty()) {
-            polyline.points.insert(polyline.points.end(), pts.begin(), pts.end());
+        Points pts_frontier = getFrontier(polylines_frontier, polyline.last_point(), polyline.first_point(), scale_(this->spacing), polylines_blocker);
+        if (!pts_frontier.empty()) {
+            polyline.points.insert(polyline.points.end(), pts_frontier.begin(), pts_frontier.end());
             polyline.points.insert(polyline.points.begin(), polyline.points.back());
         }
         polylines_out.emplace_back(polyline);
diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp
index b7f6b5b10..98717c41f 100644
--- a/src/libslic3r/Fill/FillBase.hpp
+++ b/src/libslic3r/Fill/FillBase.hpp
@@ -109,7 +109,7 @@ protected:
 
     virtual std::pair<float, Point> _infill_direction(const Surface *surface) const;
 
-    void connect_infill(const Polylines &infill_ordered, const ExPolygon &boundary, Polylines &polylines_out);
+    void connect_infill(const Polylines &infill_ordered, const ExPolygon &boundary, Polylines &polylines_out, const FillParams &params);
 
 public:
     static coord_t  _adjust_solid_spacing(const coord_t width, const coord_t distance);
diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index 9972e210c..b8fe0ed72 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -191,13 +191,21 @@ void FillGyroid::_fill_surface_single(
         polylines_chained.insert(polylines_chained.end(), polylines_to_sort.begin(), polylines_to_sort.end());
     }
 
+    size_t polylines_out_first_idx = polylines_out.size();
     if (!polylines_chained.empty()) {
-
         // connect lines
         if (params.dont_connect) {
             polylines_out.insert(polylines_out.end(), polylines_chained.begin(), polylines_chained.end());
         } else {
-            this->connect_infill(polylines_chained, expolygon, polylines_out);
+            this->connect_infill(polylines_chained, expolygon, polylines_out, params);
+        }
+    }
+
+    //remove too small bits (larger than longer);
+    for (size_t idx = polylines_out_first_idx; idx < polylines_out.size(); idx++) {
+        if (polylines_out[idx].length() < scale_(this->spacing * 3)) {
+            polylines_out.erase(polylines_out.begin() + idx);
+            idx--;
         }
     }
 }

From b9901f1730cca7040bc1d863afc5d0a8963d75be Mon Sep 17 00:00:00 2001
From: Yuri D'Elia <wavexx@thregr.org>
Date: Thu, 20 Jun 2019 00:27:22 +0200
Subject: [PATCH 06/84] Parametric tolerance for Gyroid infill

---
 src/libslic3r/Fill/FillGyroid.cpp | 57 ++++++++++++++++++-------------
 1 file changed, 33 insertions(+), 24 deletions(-)

diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index b8fe0ed72..7c6674556 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -55,43 +55,52 @@ static inline Polyline make_wave(
     return polyline;
 }
 
-static std::vector<Vec2d> make_one_period(double width, double scaleFactor, double z_cos, double z_sin, bool vertical, bool flip)
+static std::vector<Vec2d> make_one_period(double width, double scaleFactor, double z_cos, double z_sin, bool vertical, bool flip, double tolerance)
 {
     std::vector<Vec2d> points;
-    double dx = M_PI_4; // very coarse spacing to begin with
+    double dx = M_PI_2; // exact coordinates on main inflexion lobes
     double limit = std::min(2*M_PI, width);
     for (double x = 0.; x < limit + EPSILON; x += dx) {  // so the last point is there too
         x = std::min(x, limit);
-        points.emplace_back(Vec2d(x,f(x, z_sin,z_cos, vertical, flip)));
+        points.emplace_back(Vec2d(x, f(x, z_sin, z_cos, vertical, flip)));
     }
 
-    // now we will check all internal points and in case some are too far from the line connecting its neighbours,
-    // we will add one more point on each side:
-    const double tolerance = .1;
-    for (unsigned int i=1;i<points.size()-1;++i) {
-        auto& lp = points[i-1]; // left point
-        auto& tp = points[i];   // this point
-        Vec2d lrv = tp - lp;
-        auto& rp = points[i+1]; // right point
-        // calculate distance of the point to the line:
-        double dist_mm = unscale<double>(scaleFactor) * std::abs(cross2(rp, lp) - cross2(rp - lp, tp)) / lrv.norm();
-        if (dist_mm > tolerance) {                               // if the difference from straight line is more than this
-            double x = 0.5f * (points[i-1](0) + points[i](0));
-            points.emplace_back(Vec2d(x, f(x, z_sin, z_cos, vertical, flip)));
-            x = 0.5f * (points[i+1](0) + points[i](0));
-            points.emplace_back(Vec2d(x, f(x, z_sin, z_cos, vertical, flip)));
-            // we added the points to the end, but need them all in order
-            std::sort(points.begin(), points.end(), [](const Vec2d &lhs, const Vec2d &rhs){ return lhs < rhs; });
-            // decrement i so we also check the first newly added point
-            --i;
+    // piecewise increase in resolution up to requested tolerance
+    for(;;)
+    {
+        size_t size = points.size();
+        for (unsigned int i = 1;i < size; ++i) {
+            auto& lp = points[i-1]; // left point
+            auto& rp = points[i];   // right point
+            double x = lp(0) + (rp(0) - lp(0)) / 2;
+            double y = f(x, z_sin, z_cos, vertical, flip);
+            Vec2d ip = {x, y};
+            if (std::abs(cross2(Vec2d(ip - lp), Vec2d(ip - rp))) > sqr(tolerance)) {
+                points.emplace_back(std::move(ip));
+            }
+        }
+
+        if (size == points.size())
+            break;
+        else
+        {
+            // insert new points in order
+            std::sort(points.begin(), points.end(),
+                      [](const Vec2d &lhs, const Vec2d &rhs) { return lhs(0) < rhs(0); });
         }
     }
+
     return points;
 }
 
 static Polylines make_gyroid_waves(double gridZ, double density_adjusted, double line_spacing, double width, double height)
 {
     const double scaleFactor = scale_(line_spacing) / density_adjusted;
+
+    // tolerance (in scaled units)
+    // TODO: should consider layer thickness
+    const double tolerance = line_spacing / 2 / unscale<double>(scaleFactor);
+
  //scale factor for 5% : 8 712 388
  // 1z = 10^-6 mm ?
     const double z     = gridZ / scaleFactor;
@@ -109,9 +118,9 @@ static Polylines make_gyroid_waves(double gridZ, double density_adjusted, double
         std::swap(width,height);
     }
 
-    std::vector<Vec2d> one_period_odd = make_one_period(width, scaleFactor, z_cos, z_sin, vertical, flip); // creates one period of the waves, so it doesn't have to be recalculated all the time
+    std::vector<Vec2d> one_period_odd = make_one_period(width, scaleFactor, z_cos, z_sin, vertical, flip, tolerance); // creates one period of the waves, so it doesn't have to be recalculated all the time
     flip = !flip;                                                                   // even polylines are a bit shifted
-    std::vector<Vec2d> one_period_even = make_one_period(width, scaleFactor, z_cos, z_sin, vertical, flip);
+    std::vector<Vec2d> one_period_even = make_one_period(width, scaleFactor, z_cos, z_sin, vertical, flip, tolerance);
     Polylines result;
 
     for (double y0 = lower_bound; y0 < upper_bound + EPSILON; y0 += M_PI) {

From 5932881291be0ef99abc72677fdf2507e9fd0fce Mon Sep 17 00:00:00 2001
From: Yuri D'Elia <wavexx@thregr.org>
Date: Sat, 22 Jun 2019 15:59:54 +0200
Subject: [PATCH 07/84] Reduce reallocations and memory usage in gyroid

---
 src/libslic3r/Fill/FillGyroid.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index 7c6674556..ecc1d54a0 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -35,6 +35,7 @@ static inline Polyline make_wave(
 {
     std::vector<Vec2d> points = one_period;
     double period = points.back()(0);
+    points.reserve(one_period.size() * floor(width / period));
     points.pop_back();
     int n = points.size();
     do {
@@ -44,6 +45,7 @@ static inline Polyline make_wave(
 
     // and construct the final polyline to return:
     Polyline polyline;
+    polyline.points.reserve(points.size());
     for (auto& point : points) {
         point(1) += offset;
         point(1) = clamp(0., height, double(point(1)));
@@ -60,6 +62,7 @@ static std::vector<Vec2d> make_one_period(double width, double scaleFactor, doub
     std::vector<Vec2d> points;
     double dx = M_PI_2; // exact coordinates on main inflexion lobes
     double limit = std::min(2*M_PI, width);
+    points.reserve(ceil(limit / tolerance / 3));
     for (double x = 0.; x < limit + EPSILON; x += dx) {  // so the last point is there too
         x = std::min(x, limit);
         points.emplace_back(Vec2d(x, f(x, z_sin, z_cos, vertical, flip)));

From e7616efc89462a278017ef3b1f2620f999a3e4e5 Mon Sep 17 00:00:00 2001
From: Yuri D'Elia <wavexx@thregr.org>
Date: Sat, 22 Jun 2019 18:56:44 +0200
Subject: [PATCH 08/84] Handle truncated gyroid patterns correctly

When generating patterns which are less than a full wave, always
generate the last point correctly.

When extending a full wave to a line, fixup the last point
to the real gyroid position instead of shifting the point.
---
 src/libslic3r/Fill/FillGyroid.cpp | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index ecc1d54a0..c0b3bd907 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -31,17 +31,22 @@ static inline double f(double x, double z_sin, double z_cos, bool vertical, bool
 
 static inline Polyline make_wave(
     const std::vector<Vec2d>& one_period, double width, double height, double offset, double scaleFactor,
-    double z_cos, double z_sin, bool vertical)
+    double z_cos, double z_sin, bool vertical, bool flip)
 {
     std::vector<Vec2d> points = one_period;
     double period = points.back()(0);
-    points.reserve(one_period.size() * floor(width / period));
-    points.pop_back();
-    int n = points.size();
-    do {
-        points.emplace_back(Vec2d(points[points.size()-n](0) + period, points[points.size()-n](1)));
-    } while (points.back()(0) < width);
-    points.back()(0) = width;
+    if (width != period) // do not extend if already truncated
+    {
+        points.reserve(one_period.size() * floor(width / period));
+        points.pop_back();
+
+        int n = points.size();
+        do {
+            points.emplace_back(Vec2d(points[points.size()-n](0) + period, points[points.size()-n](1)));
+        } while (points.back()(0) < width - EPSILON);
+
+        points.emplace_back(Vec2d(width, f(width, z_sin, z_cos, vertical, flip)));
+    }
 
     // and construct the final polyline to return:
     Polyline polyline;
@@ -63,10 +68,11 @@ static std::vector<Vec2d> make_one_period(double width, double scaleFactor, doub
     double dx = M_PI_2; // exact coordinates on main inflexion lobes
     double limit = std::min(2*M_PI, width);
     points.reserve(ceil(limit / tolerance / 3));
-    for (double x = 0.; x < limit + EPSILON; x += dx) {  // so the last point is there too
-        x = std::min(x, limit);
+
+    for (double x = 0.; x < limit - EPSILON; x += dx) {
         points.emplace_back(Vec2d(x, f(x, z_sin, z_cos, vertical, flip)));
     }
+    points.emplace_back(Vec2d(limit, f(limit, z_sin, z_cos, vertical, flip)));
 
     // piecewise increase in resolution up to requested tolerance
     for(;;)
@@ -128,11 +134,11 @@ static Polylines make_gyroid_waves(double gridZ, double density_adjusted, double
 
     for (double y0 = lower_bound; y0 < upper_bound + EPSILON; y0 += M_PI) {
         // creates odd polylines
-        result.emplace_back(make_wave(one_period_odd, width, height, y0, scaleFactor, z_cos, z_sin, vertical));
+        result.emplace_back(make_wave(one_period_odd, width, height, y0, scaleFactor, z_cos, z_sin, vertical, flip));
         // creates even polylines
         y0 += M_PI;
         if (y0 < upper_bound + EPSILON) {
-            result.emplace_back(make_wave(one_period_even, width, height, y0, scaleFactor, z_cos, z_sin, vertical));
+            result.emplace_back(make_wave(one_period_even, width, height, y0, scaleFactor, z_cos, z_sin, vertical, flip));
         }
     }
 

From 1a846421530328c1190e1180929fdf5ae1496328 Mon Sep 17 00:00:00 2001
From: Yuri D'Elia <wavexx@thregr.org>
Date: Tue, 16 Jul 2019 01:15:00 +0200
Subject: [PATCH 09/84] Allow gyroid pattern rotation over Z

---
 src/libslic3r/Fill/FillGyroid.cpp | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index c0b3bd907..1e1e35b9e 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -152,7 +152,8 @@ void FillGyroid::_fill_surface_single(
     ExPolygon                       &expolygon, 
     Polylines                       &polylines_out)
 {
-    // no rotation is supported for this infill pattern (yet)
+    expolygon.rotate(-this->angle);
+
     BoundingBox bb = expolygon.contour.bounding_box();
     // Density adjusted to have a good %of weight.
     double      density_adjusted = std::max(0., params.density * 2.44);
@@ -160,7 +161,7 @@ void FillGyroid::_fill_surface_single(
     coord_t     distance = coord_t(scale_(this->spacing) / density_adjusted);
 
     // align bounding box to a multiple of our grid module
-    bb.merge(_align_to_grid(bb.min, Point(2.*M_PI*distance, 2.*M_PI*distance)));
+    bb.merge(_align_to_grid(bb.min, Point(2*M_PI*distance, 2*M_PI*distance)));
 
     // generate pattern
     Polylines polylines_square = make_gyroid_waves(
@@ -169,16 +170,15 @@ void FillGyroid::_fill_surface_single(
         this->spacing,
         ceil(bb.size()(0) / distance) + 1.,
         ceil(bb.size()(1) / distance) + 1.);
-    
-    // move pattern in place
-    for (Polyline &polyline : polylines_square)
-        polyline.translate(bb.min(0), bb.min(1));
 
     // clip pattern to boundaries, keeping the polyline order & ordering the fragment to be able to join them easily
-    //Polylines polylines = intersection_pl(polylines_square, (Polygons)expolygon);
     Polylines polylines_chained;
     for (size_t idx_polyline = 0; idx_polyline < polylines_square.size(); ++idx_polyline) {
+        // shift the polyline to the grid origin
         Polyline &poly_to_cut = polylines_square[idx_polyline];
+        poly_to_cut.translate(bb.min);
+
+        // intersect
         Polylines polylines_to_sort = intersection_pl(Polylines() = { poly_to_cut }, (Polygons)expolygon);
         for (Polyline &polyline : polylines_to_sort) {
             //TODO: replace by closest_index_point()
@@ -226,6 +226,12 @@ void FillGyroid::_fill_surface_single(
             idx--;
         }
     }
+
+    // new paths must be rotated back
+    for (Polylines::iterator it = polylines_out.begin() + polylines_out_first_idx;
+         it != polylines_out.end(); ++it) {
+        it->rotate(this->angle);
+    }
 }
 
 } // namespace Slic3r

From f8490fb4e0265a7c3ecd5292d1ae9716755fc56b Mon Sep 17 00:00:00 2001
From: Yuri D'Elia <wavexx@thregr.org>
Date: Fri, 19 Jul 2019 12:59:57 +0200
Subject: [PATCH 10/84] Limit upper tolerance in Gyroid

Do not reduce resolution more than necessary when using larger nozzles
and/or higher layer heights.
---
 src/libslic3r/Fill/FillGyroid.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index 1e1e35b9e..651abffd9 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -106,9 +106,9 @@ static Polylines make_gyroid_waves(double gridZ, double density_adjusted, double
 {
     const double scaleFactor = scale_(line_spacing) / density_adjusted;
 
-    // tolerance (in scaled units)
-    // TODO: should consider layer thickness
-    const double tolerance = line_spacing / 2 / unscale<double>(scaleFactor);
+    // tolerance (in scaled units) - note: clamp the maximum tolerance
+    // as there's no benefit to reduce the definition with large nozzles
+    const double tolerance = std::min(line_spacing, 0.4) / 2 / unscale<double>(scaleFactor);
 
  //scale factor for 5% : 8 712 388
  // 1z = 10^-6 mm ?

From da6c285f1f1bf8e1bdec8ec2998e3962842d6cc8 Mon Sep 17 00:00:00 2001
From: Yuri D'Elia <wavexx@thregr.org>
Date: Wed, 7 Aug 2019 21:45:23 +0200
Subject: [PATCH 11/84] Maximize gyroid printing speed angle

Counter-rotate the default angle by 45' so that gyroid is kept at it's
maximum printing speed by default.
---
 src/libslic3r/Fill/FillGyroid.cpp | 12 ++++++++----
 src/libslic3r/Fill/FillGyroid.hpp |  5 +++++
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index 651abffd9..b7f0f879b 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -152,7 +152,9 @@ void FillGyroid::_fill_surface_single(
     ExPolygon                       &expolygon, 
     Polylines                       &polylines_out)
 {
-    expolygon.rotate(-this->angle);
+    float infill_angle = this->angle + (CorrectionAngle * 2*M_PI) / 360.;
+    if(abs(infill_angle) >= EPSILON)
+        expolygon.rotate(-infill_angle);
 
     BoundingBox bb = expolygon.contour.bounding_box();
     // Density adjusted to have a good %of weight.
@@ -228,9 +230,11 @@ void FillGyroid::_fill_surface_single(
     }
 
     // new paths must be rotated back
-    for (Polylines::iterator it = polylines_out.begin() + polylines_out_first_idx;
-         it != polylines_out.end(); ++it) {
-        it->rotate(this->angle);
+    if(abs(infill_angle) >= EPSILON) {
+        for (Polylines::iterator it = polylines_out.begin() + polylines_out_first_idx;
+             it != polylines_out.end(); ++it) {
+            it->rotate(infill_angle);
+        }
     }
 }
 
diff --git a/src/libslic3r/Fill/FillGyroid.hpp b/src/libslic3r/Fill/FillGyroid.hpp
index 9c3cef940..171a6b034 100644
--- a/src/libslic3r/Fill/FillGyroid.hpp
+++ b/src/libslic3r/Fill/FillGyroid.hpp
@@ -16,6 +16,11 @@ public:
     // require bridge flow since most of this pattern hangs in air
     virtual bool use_bridge_flow() const { return false; }
 
+    // Correction applied to regular infill angle to maximize printing
+    // speed in default configuration (degrees)
+    static constexpr float CorrectionAngle = -45.;
+
+
 protected:
     virtual void _fill_surface_single(
         const FillParams                &params, 

From 90c85b7c8ab3397271761fa64a68b0bcce31da0b Mon Sep 17 00:00:00 2001
From: Yuri D'Elia <wavexx@thregr.org>
Date: Wed, 7 Aug 2019 21:58:45 +0200
Subject: [PATCH 12/84] Move gyroid constants to the class declaration

---
 src/libslic3r/Fill/FillGyroid.cpp | 8 ++++----
 src/libslic3r/Fill/FillGyroid.hpp | 6 ++++++
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index b7f0f879b..ae96f1f90 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -106,9 +106,9 @@ static Polylines make_gyroid_waves(double gridZ, double density_adjusted, double
 {
     const double scaleFactor = scale_(line_spacing) / density_adjusted;
 
-    // tolerance (in scaled units) - note: clamp the maximum tolerance
-    // as there's no benefit to reduce the definition with large nozzles
-    const double tolerance = std::min(line_spacing, 0.4) / 2 / unscale<double>(scaleFactor);
+    // tolerance in scaled units. clamp the maximum tolerance as there's
+    // no processing-speed benefit to do so beyond a certain point
+    const double tolerance = std::min(line_spacing, FillGyroid::PatternTolerance) / 2 / unscale<double>(scaleFactor);
 
  //scale factor for 5% : 8 712 388
  // 1z = 10^-6 mm ?
@@ -158,7 +158,7 @@ void FillGyroid::_fill_surface_single(
 
     BoundingBox bb = expolygon.contour.bounding_box();
     // Density adjusted to have a good %of weight.
-    double      density_adjusted = std::max(0., params.density * 2.44);
+    double      density_adjusted = std::max(0., params.density * DensityAdjust);
     // Distance between the gyroid waves in scaled coordinates.
     coord_t     distance = coord_t(scale_(this->spacing) / density_adjusted);
 
diff --git a/src/libslic3r/Fill/FillGyroid.hpp b/src/libslic3r/Fill/FillGyroid.hpp
index 171a6b034..261c0039e 100644
--- a/src/libslic3r/Fill/FillGyroid.hpp
+++ b/src/libslic3r/Fill/FillGyroid.hpp
@@ -20,6 +20,12 @@ public:
     // speed in default configuration (degrees)
     static constexpr float CorrectionAngle = -45.;
 
+    // Density adjustment to have a good %of weight.
+    static constexpr double DensityAdjust = 2.44;
+
+    // Gyroid upper resolution tolerance (mm^-2)
+    static constexpr double PatternTolerance = 0.4;
+
 
 protected:
     virtual void _fill_surface_single(

From 753b34a0d3cae8acd6fb6b65abad7631c9a4f5ec Mon Sep 17 00:00:00 2001
From: Yuri D'Elia <wavexx@thregr.org>
Date: Thu, 8 Aug 2019 16:53:26 +0200
Subject: [PATCH 13/84] Make Gyroid::PatternTolerance match the description

Move the division out of the switch in order to make the tolerance match
the expected unit.
---
 src/libslic3r/Fill/FillGyroid.cpp | 6 +++---
 src/libslic3r/Fill/FillGyroid.hpp | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index ae96f1f90..341815e9b 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -108,10 +108,10 @@ static Polylines make_gyroid_waves(double gridZ, double density_adjusted, double
 
     // tolerance in scaled units. clamp the maximum tolerance as there's
     // no processing-speed benefit to do so beyond a certain point
-    const double tolerance = std::min(line_spacing, FillGyroid::PatternTolerance) / 2 / unscale<double>(scaleFactor);
+    const double tolerance = std::min(line_spacing / 2, FillGyroid::PatternTolerance) / unscale<double>(scaleFactor);
 
- //scale factor for 5% : 8 712 388
- // 1z = 10^-6 mm ?
+    //scale factor for 5% : 8 712 388
+    // 1z = 10^-6 mm ?
     const double z     = gridZ / scaleFactor;
     const double z_sin = sin(z);
     const double z_cos = cos(z);
diff --git a/src/libslic3r/Fill/FillGyroid.hpp b/src/libslic3r/Fill/FillGyroid.hpp
index 261c0039e..37babb25e 100644
--- a/src/libslic3r/Fill/FillGyroid.hpp
+++ b/src/libslic3r/Fill/FillGyroid.hpp
@@ -24,7 +24,7 @@ public:
     static constexpr double DensityAdjust = 2.44;
 
     // Gyroid upper resolution tolerance (mm^-2)
-    static constexpr double PatternTolerance = 0.4;
+    static constexpr double PatternTolerance = 0.2;
 
 
 protected:

From 189d7be93bfd67b4ce1691b19b174b87c39a1857 Mon Sep 17 00:00:00 2001
From: Yuri D'Elia <wavexx@thregr.org>
Date: Thu, 8 Aug 2019 17:04:15 +0200
Subject: [PATCH 14/84] Fix two warnings

---
 src/libslic3r/Fill/FillBase.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index f9259eed9..c4ad93be5 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -454,12 +454,12 @@ void Fill::connect_infill(const Polylines &infill_ordered, const ExPolygon &boun
     }
 
     //try to link to nearest point if possible
-    for (int idx1 = 0; idx1 < polylines_connected.size(); idx1++) {
+    for (size_t idx1 = 0; idx1 < polylines_connected.size(); idx1++) {
         size_t min_idx = 0;
         coordf_t min_length = 0;
         bool switch_id1 = false;
         bool switch_id2 = false;
-        for (int idx2 = idx1 + 1; idx2 < polylines_connected.size(); idx2++) {
+        for (size_t idx2 = idx1 + 1; idx2 < polylines_connected.size(); idx2++) {
             double last_first = polylines_connected[idx1].last_point().distance_to_square(polylines_connected[idx2].first_point());
             double first_first = polylines_connected[idx1].first_point().distance_to_square(polylines_connected[idx2].first_point());
             double first_last = polylines_connected[idx1].first_point().distance_to_square(polylines_connected[idx2].last_point());

From 21ee458de561762ba847e5d0afb19253e558998b Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Thu, 22 Aug 2019 09:47:44 +0200
Subject: [PATCH 15/84] Some Vojtech's beautification

---
 src/libslic3r/Fill/FillBase.cpp | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index c4ad93be5..503e2c2c3 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -130,15 +130,12 @@ std::pair<float, Point> Fill::_infill_direction(const Surface *surface) const
     return std::pair<float, Point>(out_angle, out_shift);
 }
 
-
-
-
 /// cut poly between poly.point[idx_1] & poly.point[idx_1+1]
 /// add p1+-width to one part and p2+-width to the other one.
 /// add the "new" polyline to polylines (to part cut from poly)
 /// p1 & p2 have to be between poly.point[idx_1] & poly.point[idx_1+1]
 /// if idx_1 is ==0 or == size-1, then we don't need to create a new polyline.
-void cut_polyline(Polyline &poly, Polylines &polylines, size_t idx_1, Point p1, Point p2) {
+static void cut_polyline(Polyline &poly, Polylines &polylines, size_t idx_1, Point p1, Point p2) {
     //reorder points
     if (p1.distance_to_square(poly.points[idx_1]) > p2.distance_to_square(poly.points[idx_1])) {
         Point temp = p2;
@@ -166,7 +163,7 @@ void cut_polyline(Polyline &poly, Polylines &polylines, size_t idx_1, Point p1,
 }
 
 /// the poly is like a polygon but with first_point != last_point (already removed)
-void cut_polygon(Polyline &poly, size_t idx_1, Point p1, Point p2) {
+static void cut_polygon(Polyline &poly, size_t idx_1, Point p1, Point p2) {
     //reorder points
     if (p1.distance_to_square(poly.points[idx_1]) > p2.distance_to_square(poly.points[idx_1])) {
         Point temp = p2;
@@ -188,7 +185,7 @@ void cut_polygon(Polyline &poly, size_t idx_1, Point p1, Point p2) {
 /// it use equally_spaced_points with width/2 precision, so don't worry with pts_to_check number of points.
 /// it use the given polylines_blocker points, be sure to put enough of them to be reliable.
 /// complexity : N(pts_to_check.equally_spaced_points(width / 2)) x N(polylines_blocker.points)
-bool collision(const Points &pts_to_check, const Polylines &polylines_blocker, const coordf_t width) {
+static bool collision(const Points &pts_to_check, const Polylines &polylines_blocker, const coordf_t width) {
     //check if it's not too close to a polyline
     coordf_t min_dist_square = width * width * 0.9 - SCALED_EPSILON;
     Polyline better_polylines(pts_to_check);
@@ -209,7 +206,7 @@ bool collision(const Points &pts_to_check, const Polylines &polylines_blocker, c
 /// width if the width of the extrusion
 /// polylines_blockers are the array of polylines to check if the path isn't blocked by something.
 /// complexity: N(polylines.points) + a collision check after that if we finded a path: N(2(p2-p1)/width) x N(polylines_blocker.points)
-Points getFrontier(Polylines &polylines, const Point& p1, const Point& p2, const coord_t width, const Polylines &polylines_blockers, coord_t max_size = -1) {
+static Points get_frontier(Polylines &polylines, const Point& p1, const Point& p2, const coord_t width, const Polylines &polylines_blockers, coord_t max_size = -1) {
     for (size_t idx_poly = 0; idx_poly < polylines.size(); ++idx_poly) {
         Polyline &poly = polylines[idx_poly];
         if (poly.size() <= 1) continue;
@@ -414,7 +411,7 @@ void Fill::connect_infill(const Polylines &infill_ordered, const ExPolygon &boun
             const Point &last_point = pts_end.back();
             const Point &first_point = polyline.points.front();
             if (last_point.distance_to(first_point) < scale_(this->spacing) * 10) {
-                Points pts_frontier = getFrontier(polylines_frontier, last_point, first_point, scale_(this->spacing), polylines_blocker, (coord_t)scale_(ideal_length) * 2);
+                Points pts_frontier = get_frontier(polylines_frontier, last_point, first_point, scale_(this->spacing), polylines_blocker, (coord_t)scale_(ideal_length) * 2);
                 if (!pts_frontier.empty()) {
                     // The lines can be connected.
                     pts_end.insert(pts_end.end(), pts_frontier.begin(), pts_frontier.end());
@@ -439,7 +436,7 @@ void Fill::connect_infill(const Polylines &infill_ordered, const ExPolygon &boun
             const Point &first_point = polyline.points.front();
 
             Polylines before = polylines_frontier;
-            Points pts_frontier = getFrontier(polylines_frontier, last_point, first_point, scale_(this->spacing), polylines_blocker);
+            Points pts_frontier = get_frontier(polylines_frontier, last_point, first_point, scale_(this->spacing), polylines_blocker);
             if (!pts_frontier.empty()) {
                 // The lines can be connected.
                 pts_end.insert(pts_end.end(), pts_frontier.begin(), pts_frontier.end());
@@ -473,7 +470,7 @@ void Fill::connect_infill(const Polylines &infill_ordered, const ExPolygon &boun
             }
         }
         if (min_idx > idx1 && min_idx < polylines_connected.size()){
-            Points pts_frontier = getFrontier(polylines_frontier, 
+            Points pts_frontier = get_frontier(polylines_frontier, 
                 switch_id1 ? polylines_connected[idx1].first_point() : polylines_connected[idx1].last_point(), 
                 switch_id2 ? polylines_connected[min_idx].last_point() : polylines_connected[min_idx].first_point(),
                 scale_(this->spacing), polylines_blocker);
@@ -490,7 +487,7 @@ void Fill::connect_infill(const Polylines &infill_ordered, const ExPolygon &boun
 
     //try to create some loops if possible
     for (Polyline &polyline : polylines_connected) {
-        Points pts_frontier = getFrontier(polylines_frontier, polyline.last_point(), polyline.first_point(), scale_(this->spacing), polylines_blocker);
+        Points pts_frontier = get_frontier(polylines_frontier, polyline.last_point(), polyline.first_point(), scale_(this->spacing), polylines_blocker);
         if (!pts_frontier.empty()) {
             polyline.points.insert(polyline.points.end(), pts_frontier.begin(), pts_frontier.end());
             polyline.points.insert(polyline.points.begin(), polyline.points.back());

From 04f051ff61eefaaa42ecb4f08f3beec856d0cbf2 Mon Sep 17 00:00:00 2001
From: Lukas Matena <lukasmatena@seznam.cz>
Date: Thu, 19 Sep 2019 14:58:04 +0200
Subject: [PATCH 16/84] Wipe tower now doesn't print sparse layers, it is
 instead lower than the object

---
 src/libslic3r/GCode.cpp | 46 +++++++++++++++++++++++++++++++----------
 src/libslic3r/GCode.hpp |  3 ++-
 2 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 0ccc3ddf5..3ebf75c2e 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -274,7 +274,7 @@ static inline Point wipe_tower_point_to_object_point(GCode &gcodegen, const Vec2
     return Point(scale_(wipe_tower_pt.x() - gcodegen.origin()(0)), scale_(wipe_tower_pt.y() - gcodegen.origin()(1)));
 }
 
-std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::ToolChangeResult &tcr, int new_extruder_id) const
+std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::ToolChangeResult &tcr, int new_extruder_id, double z) const
 {
     if (new_extruder_id != -1 && new_extruder_id != tcr.new_tool)
         throw std::invalid_argument("Error: WipeTowerIntegration::append_tcr was asked to do a toolchange it didn't expect.");
@@ -310,6 +310,12 @@ std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::T
         gcode += gcodegen.unretract();
     }
 
+    double current_z = gcodegen.writer().get_position().z();
+    if (z == -1.) // in case no specific z was provided, print at current_z pos
+        z = current_z;
+    if (! is_approx(z, current_z))
+        gcode += gcodegen.writer().travel_to_z(z, "Travel down to the last wipe tower layer.");
+
 
     // Process the end filament gcode.
     std::string end_filament_gcode_str;
@@ -376,16 +382,23 @@ std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::T
     // A phony move to the end position at the wipe tower.
     gcodegen.writer().travel_to_xy(end_pos.cast<double>());
     gcodegen.set_last_pos(wipe_tower_point_to_object_point(gcodegen, end_pos));
+    if (! is_approx(z, current_z)) {
+        gcode += gcodegen.writer().retract();
+        gcode += gcodegen.writer().travel_to_z(current_z, "Travel back up to the topmost object layer.");
+        gcode += gcodegen.writer().unretract();
+    }
 
-    // Prepare a future wipe.
-    gcodegen.m_wipe.path.points.clear();
-    if (new_extruder_id >= 0) {
-        // Start the wipe at the current position.
-        gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen, end_pos));
-        // Wipe end point: Wipe direction away from the closer tower edge to the further tower edge.
-        gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen, 
-            Vec2f((std::abs(m_left - end_pos.x()) < std::abs(m_right - end_pos.x())) ? m_right : m_left,
-            end_pos.y())));
+    else {
+        // Prepare a future wipe.
+        gcodegen.m_wipe.path.points.clear();
+        if (new_extruder_id >= 0) {
+            // Start the wipe at the current position.
+            gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen, end_pos));
+            // Wipe end point: Wipe direction away from the closer tower edge to the further tower edge.
+            gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen,
+                Vec2f((std::abs(m_left - end_pos.x()) < std::abs(m_right - end_pos.x())) ? m_right : m_left,
+                end_pos.y())));
+        }
     }
 
     // Let the planner know we are traveling between objects.
@@ -511,7 +524,18 @@ std::string WipeTowerIntegration::tool_change(GCode &gcodegen, int extruder_id,
 		if (m_layer_idx < (int)m_tool_changes.size()) {
 			if (! (size_t(m_tool_change_idx) < m_tool_changes[m_layer_idx].size()))
                 throw std::runtime_error("Wipe tower generation failed, possibly due to empty first layer.");
-			gcode += append_tcr(gcodegen, m_tool_changes[m_layer_idx][m_tool_change_idx++], extruder_id);
+
+
+            double wipe_tower_z = m_last_wipe_tower_print_z;
+            bool is_sparse_layer = (m_brim_done && m_tool_changes[m_layer_idx].size() == 1 && m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool);
+
+            if (m_tool_change_idx == 0 && ! is_sparse_layer)
+                wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height;
+
+            if (! is_sparse_layer) {
+                gcode += append_tcr(gcodegen, m_tool_changes[m_layer_idx][m_tool_change_idx++], extruder_id, wipe_tower_z);
+                m_last_wipe_tower_print_z = wipe_tower_z;
+            }
 		}
         m_brim_done = true;
     }
diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp
index 72813810b..16fd20faa 100644
--- a/src/libslic3r/GCode.hpp
+++ b/src/libslic3r/GCode.hpp
@@ -110,7 +110,7 @@ public:
 
 private:
     WipeTowerIntegration& operator=(const WipeTowerIntegration&);
-    std::string append_tcr(GCode &gcodegen, const WipeTower::ToolChangeResult &tcr, int new_extruder_id) const;
+    std::string append_tcr(GCode &gcodegen, const WipeTower::ToolChangeResult &tcr, int new_extruder_id, double z = -1.) const;
 
     // Postprocesses gcode: rotates and moves G1 extrusions and returns result
     std::string post_process_wipe_tower_moves(const WipeTower::ToolChangeResult& tcr, const Vec2f& translation, float angle) const;
@@ -131,6 +131,7 @@ private:
     int                                                          m_tool_change_idx;
     bool                                                         m_brim_done;
     bool                                                         i_have_brim = false;
+    double                                                       m_last_wipe_tower_print_z = 0.f;
 };
 
 class GCode {

From abaebb489a33403e5d1fbca530691d2a29ce5252 Mon Sep 17 00:00:00 2001
From: Lukas Matena <lukasmatena@seznam.cz>
Date: Thu, 19 Sep 2019 16:30:01 +0200
Subject: [PATCH 17/84] Added a config option to not print sparse layers on the
 wipe tower

---
 src/libslic3r/GCode.cpp       | 22 +++++++++++++++-------
 src/libslic3r/Print.cpp       |  1 +
 src/libslic3r/PrintConfig.cpp |  8 ++++++++
 src/libslic3r/PrintConfig.hpp |  2 ++
 src/slic3r/GUI/Preset.cpp     |  2 +-
 src/slic3r/GUI/Tab.cpp        |  1 +
 6 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 3ebf75c2e..2210e40b2 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -313,8 +313,11 @@ std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::T
     double current_z = gcodegen.writer().get_position().z();
     if (z == -1.) // in case no specific z was provided, print at current_z pos
         z = current_z;
-    if (! is_approx(z, current_z))
+    if (! is_approx(z, current_z)) {
+        gcode += gcodegen.writer().retract();
         gcode += gcodegen.writer().travel_to_z(z, "Travel down to the last wipe tower layer.");
+        gcode += gcodegen.writer().unretract();
+    }
 
 
     // Process the end filament gcode.
@@ -526,13 +529,18 @@ std::string WipeTowerIntegration::tool_change(GCode &gcodegen, int extruder_id,
                 throw std::runtime_error("Wipe tower generation failed, possibly due to empty first layer.");
 
 
-            double wipe_tower_z = m_last_wipe_tower_print_z;
-            bool is_sparse_layer = (m_brim_done && m_tool_changes[m_layer_idx].size() == 1 && m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool);
+            // Calculate where the wipe tower layer will be printed. -1 means that print z will not change,
+            // resulting in a wipe tower with sparse layers.
+            double wipe_tower_z = -1;
+            bool ignore_sparse = false;
+            if (gcodegen.config().wipe_tower_no_sparse_layers.value) {
+                wipe_tower_z = m_last_wipe_tower_print_z;
+                ignore_sparse = (m_brim_done && m_tool_changes[m_layer_idx].size() == 1 && m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool);
+                if (m_tool_change_idx == 0 && ! ignore_sparse)
+                   wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height;
+            }
 
-            if (m_tool_change_idx == 0 && ! is_sparse_layer)
-                wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height;
-
-            if (! is_sparse_layer) {
+            if (! ignore_sparse) {
                 gcode += append_tcr(gcodegen, m_tool_changes[m_layer_idx][m_tool_change_idx++], extruder_id, wipe_tower_z);
                 m_last_wipe_tower_print_z = wipe_tower_z;
             }
diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp
index 4d8482743..8a5282b4b 100644
--- a/src/libslic3r/Print.cpp
+++ b/src/libslic3r/Print.cpp
@@ -143,6 +143,7 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
         "use_volumetric_e",
         "variable_layer_height",
         "wipe",
+        "wipe_tower_no_sparse_layers",
         "wipe_tower_x",
         "wipe_tower_y",
         "wipe_tower_rotation_angle"
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 1ce00f269..f082e13b3 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -1825,6 +1825,14 @@ void PrintConfigDef::init_fff_params()
     def->mode = comAdvanced;
     def->set_default_value(new ConfigOptionBool(true));
 
+    def = this->add("wipe_tower_no_sparse_layers", coBool);
+    def->label = L("No sparse layers");
+    def->tooltip = L("If enabled, the wipe tower will not be printed on layers with no toolchanges. "
+                     "On layers with a toolchange, extruder will travel downward to print the wipe tower. "
+                     "User is responsible for ensuring there is no collision with the print.");
+    def->mode = comAdvanced;
+    def->set_default_value(new ConfigOptionBool(false));
+
     def = this->add("support_material", coBool);
     def->label = L("Generate support material");
     def->category = L("Support material");
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index 6a19edf84..20ab60e9a 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -648,6 +648,7 @@ public:
     ConfigOptionStrings             start_filament_gcode;
     ConfigOptionBool                single_extruder_multi_material;
     ConfigOptionBool                single_extruder_multi_material_priming;
+    ConfigOptionBool                wipe_tower_no_sparse_layers;
     ConfigOptionString              toolchange_gcode;
     ConfigOptionFloat               travel_speed;
     ConfigOptionBool                use_firmware_retraction;
@@ -718,6 +719,7 @@ protected:
         OPT_PTR(retract_speed);
         OPT_PTR(single_extruder_multi_material);
         OPT_PTR(single_extruder_multi_material_priming);
+        OPT_PTR(wipe_tower_no_sparse_layers);
         OPT_PTR(start_gcode);
         OPT_PTR(start_filament_gcode);
         OPT_PTR(toolchange_gcode);
diff --git a/src/slic3r/GUI/Preset.cpp b/src/slic3r/GUI/Preset.cpp
index d2503d349..853a803b7 100644
--- a/src/slic3r/GUI/Preset.cpp
+++ b/src/slic3r/GUI/Preset.cpp
@@ -385,7 +385,7 @@ const std::vector<std::string>& Preset::print_options()
         "top_infill_extrusion_width", "support_material_extrusion_width", "infill_overlap", "bridge_flow_ratio", "clip_multipart_objects",
         "elefant_foot_compensation", "xy_size_compensation", "threads", "resolution", "wipe_tower", "wipe_tower_x", "wipe_tower_y",
         "wipe_tower_width", "wipe_tower_rotation_angle", "wipe_tower_bridging", "single_extruder_multi_material_priming",
-        "compatible_printers", "compatible_printers_condition", "inherits"
+        "wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits"
     };
     return s_opts;
 }
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index c87626a48..5ecfb9a77 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -1170,6 +1170,7 @@ void TabPrint::build()
         optgroup->append_single_option_line("wipe_tower_width");
         optgroup->append_single_option_line("wipe_tower_rotation_angle");
         optgroup->append_single_option_line("wipe_tower_bridging");
+        optgroup->append_single_option_line("wipe_tower_no_sparse_layers");
         optgroup->append_single_option_line("single_extruder_multi_material_priming");
 
         optgroup = page->new_optgroup(_(L("Advanced")));

From 82bc243281e0c4e46e20a9bafecfa8d72c20936e Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Thu, 26 Sep 2019 16:33:55 +0200
Subject: [PATCH 18/84] Implemented possibility to set a resin cost

---
 src/admesh/stl.h              |  2 +-
 src/libslic3r/PrintConfig.cpp | 28 ++++++++++++++++++++++++++
 src/libslic3r/PrintConfig.hpp |  8 ++++++++
 src/libslic3r/SLAPrint.cpp    |  6 +++++-
 src/slic3r/GUI/Plater.cpp     | 32 +++++++++++++++++++++++-------
 src/slic3r/GUI/Plater.hpp     |  1 +
 src/slic3r/GUI/Preset.cpp     |  4 ++++
 src/slic3r/GUI/Tab.cpp        | 37 +++++++++++++++++++++++++++++++++--
 8 files changed, 107 insertions(+), 11 deletions(-)

diff --git a/src/admesh/stl.h b/src/admesh/stl.h
index 43999d365..a6989ca6e 100644
--- a/src/admesh/stl.h
+++ b/src/admesh/stl.h
@@ -90,7 +90,7 @@ struct stl_neighbors {
 
 struct stl_stats {
     stl_stats() { memset(&header, 0, 81); }
-    char          header[81]                = "";
+    char          header[81];//                = "";
     stl_type      type                      = (stl_type)0;
     uint32_t      number_of_facets          = 0;
     stl_vertex    max                       = stl_vertex::Zero();
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 1ce00f269..a862a8fe3 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -2404,6 +2404,34 @@ void PrintConfigDef::init_sla_params()
     def->min = 0;
     def->set_default_value(new ConfigOptionFloat(0.3));
 
+    def = this->add("bottle_volume", coFloat);
+    def->label = L("Bottle volume");
+    def->tooltip = L("Bottle volume");
+    def->sidetext = L("ml");
+    def->min = 50;
+    def->set_default_value(new ConfigOptionFloat(960.0));
+
+    def = this->add("bottle_weight", coFloat);
+    def->label = L("Bottle weight");
+    def->tooltip = L("Bottle weight");
+    def->sidetext = L("kg");
+    def->min = 0;
+    def->set_default_value(new ConfigOptionFloat(1.0));
+
+    def = this->add("material_density", coFloat);
+    def->label = L("Density");
+    def->tooltip = L("Density");
+    def->sidetext = L("g/ml");
+    def->min = 0;
+    def->set_default_value(new ConfigOptionFloat(0.960));
+
+    def = this->add("bottle_cost", coFloat);
+    def->label = L("Cost");
+    def->tooltip = L("Cost");
+    def->sidetext = L("money/bottle");
+    def->min = 0;
+    def->set_default_value(new ConfigOptionFloat(0.0));
+
     def = this->add("faded_layers", coInt);
     def->label = L("Faded layers");
     def->tooltip = L("Number of the layers needed for the exposure time fade from initial exposure time to the exposure time");
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index 6a19edf84..e92ddabac 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -1098,6 +1098,10 @@ class SLAMaterialConfig : public StaticPrintConfig
     STATIC_PRINT_CONFIG_CACHE(SLAMaterialConfig)
 public:
     ConfigOptionFloat                       initial_layer_height;
+    ConfigOptionFloat                       bottle_cost;
+    ConfigOptionFloat                       bottle_volume;
+    ConfigOptionFloat                       bottle_weight;
+    ConfigOptionFloat                       material_density;
     ConfigOptionFloat                       exposure_time;
     ConfigOptionFloat                       initial_exposure_time;
     ConfigOptionFloats                      material_correction;
@@ -1105,6 +1109,10 @@ protected:
     void initialize(StaticCacheBase &cache, const char *base_ptr)
     {
         OPT_PTR(initial_layer_height);
+        OPT_PTR(bottle_cost);
+        OPT_PTR(bottle_volume);
+        OPT_PTR(bottle_weight);
+        OPT_PTR(material_density);
         OPT_PTR(exposure_time);
         OPT_PTR(initial_exposure_time);
         OPT_PTR(material_correction);
diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp
index 46d039c1f..604899652 100644
--- a/src/libslic3r/SLAPrint.cpp
+++ b/src/libslic3r/SLAPrint.cpp
@@ -1620,7 +1620,11 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector<t_config_opt
         "output_filename_format",
         "fast_tilt_time",
         "slow_tilt_time",
-        "area_fill"
+        "area_fill",
+        "bottle_cost",
+        "bottle_volume",
+        "bottle_weight",
+        "material_density"
     };
 
     std::vector<SLAPrintStep> steps;
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 97c292703..1042499b2 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -221,7 +221,7 @@ SlicedInfo::SlicedInfo(wxWindow *parent) :
     init_info_label(_(L("Used Filament (mm³)")));
     init_info_label(_(L("Used Filament (g)")));
     init_info_label(_(L("Used Material (unit)")));
-    init_info_label(_(L("Cost")));
+    init_info_label(_(L("Cost (money)")));
     init_info_label(_(L("Estimated printing time")));
     init_info_label(_(L("Number of tool changes")));
 
@@ -1117,12 +1117,10 @@ void Sidebar::show_info_sizer()
     }
 }
 
-void Sidebar::show_sliced_info_sizer(const bool show)
+void Sidebar::update_sliced_info_sizer()
 {
-    wxWindowUpdateLocker freeze_guard(this);
-
-    p->sliced_info->Show(show);
-    if (show) {
+    if (p->sliced_info->IsShown(size_t(0)))
+    {
         if (p->plater->printer_technology() == ptSLA)
         {
             const SLAPrintStatistics& ps = p->plater->sla_print().print_statistics();
@@ -1138,7 +1136,18 @@ void Sidebar::show_sliced_info_sizer(const bool show)
                 wxString::Format("%.2f", (ps.objects_used_material + ps.support_used_material) / 1000);
             p->sliced_info->SetTextAndShow(siMateril_unit, info_text, new_label);
 
-            p->sliced_info->SetTextAndShow(siCost, "N/A"/*wxString::Format("%.2f", ps.total_cost)*/);
+            wxString str_total_cost = "N/A";
+
+            DynamicPrintConfig* cfg = wxGetApp().get_tab(Preset::TYPE_SLA_MATERIAL)->get_config();
+            if (cfg->option("bottle_cost")->getFloat() > 0.0 &&
+                cfg->option("bottle_volume")->getFloat() > 0.0)
+            {
+                double material_cost = cfg->option("bottle_cost")->getFloat() / 
+                                       cfg->option("bottle_volume")->getFloat();
+                str_total_cost = wxString::Format("%.2f", material_cost*(ps.objects_used_material + ps.support_used_material) / 1000);                
+            }
+            p->sliced_info->SetTextAndShow(siCost, str_total_cost);
+
             wxString t_est = std::isnan(ps.estimated_print_time) ? "N/A" : get_time_dhms(float(ps.estimated_print_time));
             p->sliced_info->SetTextAndShow(siEstimatedTime, t_est, _(L("Estimated printing time")) + " :");
 
@@ -1212,6 +1221,15 @@ void Sidebar::show_sliced_info_sizer(const bool show)
             p->sliced_info->SetTextAndShow(siMateril_unit, "N/A");
         }
     }
+}
+
+void Sidebar::show_sliced_info_sizer(const bool show)
+{
+    wxWindowUpdateLocker freeze_guard(this);
+
+    p->sliced_info->Show(show);
+    if (show)
+        update_sliced_info_sizer();
 
     Layout();
     p->scrolled->Refresh();
diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp
index 26dcb5ac3..dddad9d6c 100644
--- a/src/slic3r/GUI/Plater.hpp
+++ b/src/slic3r/GUI/Plater.hpp
@@ -108,6 +108,7 @@ public:
     void                    update_objects_list_extruder_column(size_t extruders_count);
     void                    show_info_sizer();
     void                    show_sliced_info_sizer(const bool show);
+    void                    update_sliced_info_sizer();
     void                    enable_buttons(bool enable);
     void                    set_btn_label(const ActionButtonType btn_type, const wxString& label) const;
     bool                    show_reslice(bool show) const;
diff --git a/src/slic3r/GUI/Preset.cpp b/src/slic3r/GUI/Preset.cpp
index d2503d349..f6164bc45 100644
--- a/src/slic3r/GUI/Preset.cpp
+++ b/src/slic3r/GUI/Preset.cpp
@@ -500,6 +500,10 @@ const std::vector<std::string>& Preset::sla_material_options()
     if (s_opts.empty()) {
         s_opts = {
             "initial_layer_height",
+            "bottle_cost",
+            "bottle_volume",
+            "bottle_weight",
+            "material_density",
             "exposure_time",
             "initial_exposure_time",
             "material_correction",
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index c87626a48..cc0800bac 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -3398,8 +3398,41 @@ void TabSLAMaterial::build()
 
     auto page = add_options_page(_(L("Material")), "resin");
 
-    auto optgroup = page->new_optgroup(_(L("Layers")));
-//     optgroup->append_single_option_line("layer_height");
+    auto optgroup = page->new_optgroup(_(L("Material")));
+    optgroup->append_single_option_line("bottle_cost");
+    optgroup->append_single_option_line("bottle_volume");
+    optgroup->append_single_option_line("bottle_weight");
+    optgroup->append_single_option_line("material_density");
+
+    optgroup->m_on_change = [this, optgroup](t_config_option_key opt_key, boost::any value)
+    {
+        DynamicPrintConfig new_conf = *m_config;
+
+        if (opt_key == "bottle_volume") {
+            double new_bottle_weight =  boost::any_cast<double>(value)/(new_conf.option("material_density")->getFloat() * 1000);
+            new_conf.set_key_value("bottle_weight", new ConfigOptionFloat(new_bottle_weight));
+        }
+        if (opt_key == "bottle_weight") {
+            double new_bottle_volume =  boost::any_cast<double>(value)*(new_conf.option("material_density")->getFloat() * 1000);
+            new_conf.set_key_value("bottle_volume", new ConfigOptionFloat(new_bottle_volume));
+        }
+        if (opt_key == "material_density") {
+            double new_bottle_weight = new_conf.option("bottle_volume")->getFloat() * boost::any_cast<double>(value) / 1000;
+            new_conf.set_key_value("bottle_weight", new ConfigOptionFloat(new_bottle_weight));
+        }
+
+        load_config(new_conf);
+
+        update_dirty();
+        on_value_change(opt_key, value);
+
+        if (opt_key == "bottle_volume" || opt_key == "bottle_cost") {
+            wxGetApp().sidebar().update_sliced_info_sizer();
+            wxGetApp().sidebar().Layout();
+        }
+    };
+
+    optgroup = page->new_optgroup(_(L("Layers")));
     optgroup->append_single_option_line("initial_layer_height");
 
     optgroup = page->new_optgroup(_(L("Exposure")));

From c370fccd8b76b1c2f345812cd0f1cf15a3226860 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Fri, 27 Sep 2019 12:08:08 +0200
Subject: [PATCH 19/84] Changed default values. And bottle_volume is preferred
 to recalculation instead of bottle_weight

---
 src/libslic3r/PrintConfig.cpp | 4 ++--
 src/slic3r/GUI/Tab.cpp        | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index a862a8fe3..f8f17d1c3 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -2409,7 +2409,7 @@ void PrintConfigDef::init_sla_params()
     def->tooltip = L("Bottle volume");
     def->sidetext = L("ml");
     def->min = 50;
-    def->set_default_value(new ConfigOptionFloat(960.0));
+    def->set_default_value(new ConfigOptionFloat(1000.0));
 
     def = this->add("bottle_weight", coFloat);
     def->label = L("Bottle weight");
@@ -2423,7 +2423,7 @@ void PrintConfigDef::init_sla_params()
     def->tooltip = L("Density");
     def->sidetext = L("g/ml");
     def->min = 0;
-    def->set_default_value(new ConfigOptionFloat(0.960));
+    def->set_default_value(new ConfigOptionFloat(1.0));
 
     def = this->add("bottle_cost", coFloat);
     def->label = L("Cost");
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index cc0800bac..25604080e 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -3417,8 +3417,8 @@ void TabSLAMaterial::build()
             new_conf.set_key_value("bottle_volume", new ConfigOptionFloat(new_bottle_volume));
         }
         if (opt_key == "material_density") {
-            double new_bottle_weight = new_conf.option("bottle_volume")->getFloat() * boost::any_cast<double>(value) / 1000;
-            new_conf.set_key_value("bottle_weight", new ConfigOptionFloat(new_bottle_weight));
+            double new_bottle_volume = new_conf.option("bottle_weight")->getFloat() * boost::any_cast<double>(value) * 1000;
+            new_conf.set_key_value("bottle_volume", new ConfigOptionFloat(new_bottle_volume));
         }
 
         load_config(new_conf);

From b5e3899267b3ed2e2432048f804013bf21a2e54b Mon Sep 17 00:00:00 2001
From: Lukas Matena <lukasmatena@seznam.cz>
Date: Tue, 1 Oct 2019 11:41:37 +0200
Subject: [PATCH 20/84] Wipe tower: Sparse layers are not included in filament
 consumption in case that the 'no sparse layers' option is set

---
 src/libslic3r/GCode/WipeTower.cpp | 13 +++++++++----
 src/libslic3r/GCode/WipeTower.hpp |  1 +
 src/libslic3r/Print.cpp           |  2 +-
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp
index b35761b5f..fff03786f 100644
--- a/src/libslic3r/GCode/WipeTower.cpp
+++ b/src/libslic3r/GCode/WipeTower.cpp
@@ -471,6 +471,7 @@ WipeTower::WipeTower(const PrintConfig& config, const std::vector<std::vector<fl
     m_z_pos(0.f),
     m_is_first_layer(false),
     m_bridging(float(config.wipe_tower_bridging)),
+    m_no_sparse_layers(config.wipe_tower_no_sparse_layers),
     m_gcode_flavor(config.gcode_flavor),
     m_current_tool(initial_tool),
     wipe_volumes(wiping_matrix)
@@ -1136,9 +1137,10 @@ WipeTower::ToolChangeResult WipeTower::finish_layer()
     writer.set_initial_position((m_left_to_right ? fill_box.ru : fill_box.lu), // so there is never a diagonal travel
                                  m_wipe_tower_width, m_wipe_tower_depth, m_internal_rotation);
 
+    bool toolchanges_on_layer = m_layer_info->toolchanges_depth() > WT_EPSILON;
 	box_coordinates box = fill_box;
     for (int i=0;i<2;++i) {
-        if (m_layer_info->toolchanges_depth() < WT_EPSILON) { // there were no toolchanges on this layer
+        if (! toolchanges_on_layer) {
             if (i==0) box.expand(m_perimeter_width);
             else box.expand(-m_perimeter_width);
         }
@@ -1192,9 +1194,12 @@ WipeTower::ToolChangeResult WipeTower::finish_layer()
 
     m_depth_traversed = m_wipe_tower_depth-m_perimeter_width;
 
-    // Ask our writer about how much material was consumed:
-    if (m_current_tool < m_used_filament_length.size())
-        m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length();
+
+    // Ask our writer about how much material was consumed.
+    // Skip this in case the layer is sparse and config option to not print sparse layers is enabled.
+    if (! m_no_sparse_layers || toolchanges_on_layer)
+        if (m_current_tool < m_used_filament_length.size())
+            m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length();
 
 	ToolChangeResult result;
     result.priming      = false;
diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp
index 5477aa609..ff3ec46e5 100644
--- a/src/libslic3r/GCode/WipeTower.hpp
+++ b/src/libslic3r/GCode/WipeTower.hpp
@@ -218,6 +218,7 @@ private:
     float           m_parking_pos_retraction    = 0.f;
     float           m_extra_loading_move        = 0.f;
     float           m_bridging                  = 0.f;
+    bool            m_no_sparse_layers          = false;
     bool            m_set_extruder_trimpot      = false;
     bool            m_adhesion                  = true;
     GCodeFlavor     m_gcode_flavor;
diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp
index 8a5282b4b..fcda80a67 100644
--- a/src/libslic3r/Print.cpp
+++ b/src/libslic3r/Print.cpp
@@ -143,7 +143,6 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
         "use_volumetric_e",
         "variable_layer_height",
         "wipe",
-        "wipe_tower_no_sparse_layers",
         "wipe_tower_x",
         "wipe_tower_y",
         "wipe_tower_rotation_angle"
@@ -201,6 +200,7 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
             || opt_key == "wipe_tower"
             || opt_key == "wipe_tower_width"
             || opt_key == "wipe_tower_bridging"
+            || opt_key == "wipe_tower_no_sparse_layers"
             || opt_key == "wiping_volumes_matrix"
             || opt_key == "parking_pos_retraction"
             || opt_key == "cooling_tube_retraction"

From 32a42f28088edd6663379f0bcde8fcb50d6016f5 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 22 Oct 2019 16:02:31 +0200
Subject: [PATCH 21/84] Added tech ENABLE_THUMBNAIL_GENERATOR -> 1st
 installment of generation of thumbnail from plater (WIP)

---
 src/libslic3r/CMakeLists.txt          |  2 +
 src/libslic3r/GCode.cpp               |  5 ++
 src/libslic3r/GCode/ThumbnailData.cpp | 31 +++++++++
 src/libslic3r/GCode/ThumbnailData.hpp | 25 +++++++
 src/libslic3r/Technologies.hpp        | 10 +++
 src/slic3r/CMakeLists.txt             |  2 +
 src/slic3r/GUI/GLCanvas3D.hpp         |  7 ++
 src/slic3r/GUI/Plater.cpp             | 15 +++++
 src/slic3r/GUI/ThumbnailGenerator.cpp | 97 +++++++++++++++++++++++++++
 src/slic3r/GUI/ThumbnailGenerator.hpp | 37 ++++++++++
 10 files changed, 231 insertions(+)
 create mode 100644 src/libslic3r/GCode/ThumbnailData.cpp
 create mode 100644 src/libslic3r/GCode/ThumbnailData.hpp
 create mode 100644 src/slic3r/GUI/ThumbnailGenerator.cpp
 create mode 100644 src/slic3r/GUI/ThumbnailGenerator.hpp

diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt
index cbaa24e9c..f7881e5ac 100644
--- a/src/libslic3r/CMakeLists.txt
+++ b/src/libslic3r/CMakeLists.txt
@@ -71,6 +71,8 @@ add_library(libslic3r STATIC
     Format/STL.hpp
     GCode/Analyzer.cpp
     GCode/Analyzer.hpp
+    GCode/ThumbnailData.cpp
+    GCode/ThumbnailData.hpp
     GCode/CoolingBuffer.cpp
     GCode/CoolingBuffer.hpp
     GCode/PostProcessor.cpp
diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 3a72657c3..fa71ac796 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -945,6 +945,11 @@ void GCode::_do_export(Print &print, FILE *file)
     }
     print.throw_if_canceled();
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     // Write some terse information on the slicing parameters.
     const PrintObject *first_object         = print.objects().front();
     const double       layer_height         = first_object->config().layer_height.value;
diff --git a/src/libslic3r/GCode/ThumbnailData.cpp b/src/libslic3r/GCode/ThumbnailData.cpp
new file mode 100644
index 000000000..17ccbdeb6
--- /dev/null
+++ b/src/libslic3r/GCode/ThumbnailData.cpp
@@ -0,0 +1,31 @@
+#include "libslic3r/libslic3r.h"
+#include "ThumbnailData.hpp"
+
+#if ENABLE_THUMBNAIL_GENERATOR
+
+namespace Slic3r {
+
+void ThumbnailData::set(unsigned int w, unsigned int h)
+{
+    if (!pixels.empty())
+        reset();
+
+    if ((w == 0) || (h == 0))
+        return;
+
+    width = w;
+    height = h;
+    // defaults to white texture
+    pixels = std::vector<unsigned char>(width * height * 4, 255);
+}
+
+void ThumbnailData::reset()
+{
+    width = 0;
+    height = 0;
+    pixels.clear();
+}
+
+} // namespace Slic3r
+
+#endif // ENABLE_THUMBNAIL_GENERATOR
\ No newline at end of file
diff --git a/src/libslic3r/GCode/ThumbnailData.hpp b/src/libslic3r/GCode/ThumbnailData.hpp
new file mode 100644
index 000000000..193068ebe
--- /dev/null
+++ b/src/libslic3r/GCode/ThumbnailData.hpp
@@ -0,0 +1,25 @@
+#ifndef slic3r_ThumbnailData_hpp_
+#define slic3r_ThumbnailData_hpp_
+
+#if ENABLE_THUMBNAIL_GENERATOR
+
+#include <vector>
+
+namespace Slic3r {
+
+struct ThumbnailData
+{
+    unsigned int width;
+    unsigned int height;
+    std::vector<unsigned char> pixels;
+
+    ThumbnailData() { reset(); }
+    void set(unsigned int w, unsigned int h);
+    void reset();
+};
+
+} // namespace Slic3r
+
+#endif // ENABLE_THUMBNAIL_GENERATOR
+
+#endif // slic3r_ThumbnailData_hpp_
\ No newline at end of file
diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 51d092094..40e989bb2 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -32,4 +32,14 @@
 #define ENABLE_NONCUSTOM_DATA_VIEW_RENDERING (0 && ENABLE_1_42_0_ALPHA1)
 
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+//====================
+// 2.2.0.alpha1 techs
+//====================
+#define ENABLE_2_2_0_ALPHA1 1
+
+// Enable thumbnail generator
+#define ENABLE_THUMBNAIL_GENERATOR (1 && ENABLE_2_2_0_ALPHA1)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
 #endif // _technologies_h_
diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index 17b76e629..0b2dd6702 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -136,6 +136,8 @@ set(SLIC3R_GUI_SOURCES
     GUI/ProgressStatusBar.cpp
     GUI/PrintHostDialogs.cpp
     GUI/PrintHostDialogs.hpp
+    GUI/ThumbnailGenerator.cpp
+    GUI/ThumbnailGenerator.hpp
     Utils/Http.cpp
     Utils/Http.hpp
     Utils/FixModelByWin10.cpp
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 2c2676ae7..2e7fc2d77 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -446,6 +446,13 @@ public:
     wxGLCanvas* get_wxglcanvas() { return m_canvas; }
 	const wxGLCanvas* get_wxglcanvas() const { return m_canvas; }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    const GLVolumeCollection& get_volumes() const { return m_volumes; }
+//    GLVolumeCollection& get_volumes() { return m_volumes; }
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     bool init();
     void post_event(wxEvent &&event);
 
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index cca164ca3..4c44cce75 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -62,6 +62,11 @@
 #include "GUI_Preview.hpp"
 #include "3DBed.hpp"
 #include "Camera.hpp"
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+#include "ThumbnailGenerator.hpp"
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #include "Tab.hpp"
 #include "PresetBundle.hpp"
 #include "BackgroundSlicingProcess.hpp"
@@ -1373,6 +1378,11 @@ struct Plater::priv
     View3D* view3D;
     GLToolbar view_toolbar;
     Preview *preview;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    ThumbnailGenerator thumbnail_generator;
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     BackgroundSlicingProcess    background_process;
     bool suppressed_backround_processing_update { false };
@@ -3060,6 +3070,11 @@ void Plater::priv::export_gcode(fs::path output_path, PrintHostJob upload_job)
         return;
 
     if (! output_path.empty()) {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        thumbnail_generator.render_to_png_file(*view3D->get_canvas3d(), "C:/prusa/test/test.png", 256, 256, false);
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         background_process.schedule_export(output_path.string());
     } else {
         background_process.schedule_upload(std::move(upload_job));
diff --git a/src/slic3r/GUI/ThumbnailGenerator.cpp b/src/slic3r/GUI/ThumbnailGenerator.cpp
new file mode 100644
index 000000000..db823cc0b
--- /dev/null
+++ b/src/slic3r/GUI/ThumbnailGenerator.cpp
@@ -0,0 +1,97 @@
+#include "libslic3r/libslic3r.h"
+#include "ThumbnailGenerator.hpp"
+
+#if ENABLE_THUMBNAIL_GENERATOR
+
+#include "GLCanvas3D.hpp"
+#include "3DScene.hpp"
+
+#include <GL/glew.h>
+
+namespace Slic3r {
+namespace GUI {
+
+void ThumbnailGenerator::reset()
+{
+    m_data.reset();
+}
+
+bool ThumbnailGenerator::render_to_png_file(const GLCanvas3D& canvas, const std::string& filename, unsigned int w, unsigned int h, bool printable_only)
+{
+    m_data.set(w, h);
+    render(canvas, printable_only);
+
+    wxImage image(m_data.width, m_data.height);
+    image.InitAlpha();
+
+    for (unsigned int r = 0; r < m_data.height; ++r)
+    {
+        unsigned int rr = (m_data.height - 1 - r) * m_data.width;
+        for (unsigned int c = 0; c < m_data.width; ++c)
+        {
+            unsigned char* px = m_data.pixels.data() + 4 * (rr + c);
+//            unsigned char* px = m_data.pixels.data() + 4 * (r * m_data.width + c);
+            image.SetRGB((int)c, (int)r, px[0], px[1], px[2]);
+            image.SetAlpha((int)c, (int)r, px[3]);
+        }
+    }
+
+    image.SaveFile(filename, wxBITMAP_TYPE_PNG);
+
+    return true;
+}
+
+void ThumbnailGenerator::render(const GLCanvas3D& canvas, bool printable_only)
+{
+    const GLVolumeCollection& volumes = canvas.get_volumes();
+
+    std::vector<const GLVolume*> visible_volumes;
+
+    for (const GLVolume* vol : volumes.volumes)
+    {
+        if (!printable_only || vol->printable)
+            visible_volumes.push_back(vol);
+    }
+
+    if (visible_volumes.empty())
+        return;
+
+    BoundingBoxf3 box;
+    for (const GLVolume* vol : visible_volumes)
+    {
+        box.merge(vol->transformed_bounding_box());
+    }
+
+    Camera camera;
+    camera.zoom_to_box(box, m_data.width, m_data.height);
+    camera.apply_viewport(0, 0, m_data.width, m_data.height);
+    camera.apply_view_matrix();
+    camera.apply_projection(box);
+
+    glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
+    render_objects(visible_volumes);
+    glsafe(::glReadPixels(0, 0, m_data.width, m_data.height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)m_data.pixels.data()));
+}
+
+void ThumbnailGenerator::render_objects(const std::vector<const GLVolume*>& volumes) const
+{
+    static const float orange[] = { 0.99f, 0.49f, 0.26f };
+    static const float gray[]   = { 0.64f, 0.64f, 0.64f };
+
+    glsafe(::glEnable(GL_LIGHTING));
+    glsafe(::glEnable(GL_DEPTH_TEST));
+
+    for (const GLVolume* vol : volumes)
+    {
+        glsafe(::glColor3fv(vol->printable ? orange : gray));
+        vol->render();
+    }
+
+    glsafe(::glDisable(GL_DEPTH_TEST));
+    glsafe(::glDisable(GL_LIGHTING));
+}
+
+} // namespace GUI
+} // namespace Slic3r
+
+#endif // ENABLE_THUMBNAIL_GENERATOR
diff --git a/src/slic3r/GUI/ThumbnailGenerator.hpp b/src/slic3r/GUI/ThumbnailGenerator.hpp
new file mode 100644
index 000000000..1c3aef76c
--- /dev/null
+++ b/src/slic3r/GUI/ThumbnailGenerator.hpp
@@ -0,0 +1,37 @@
+#ifndef slic3r_GUI_ThumbnailGenerator_hpp_
+#define slic3r_GUI_ThumbnailGenerator_hpp_
+
+#if ENABLE_THUMBNAIL_GENERATOR
+
+#include "../libslic3r/GCode/ThumbnailData.hpp"
+
+#include <array>
+
+namespace Slic3r {
+    class GLVolume;
+namespace GUI {
+    class GLCanvas3D;
+
+    class ThumbnailGenerator
+    {
+        ThumbnailData m_data;
+
+    public:
+        ThumbnailGenerator() { reset(); }
+
+        void reset();
+
+        bool render_to_png_file(const GLCanvas3D& canvas, const std::string& filename, unsigned int w, unsigned int h, bool printable_only);
+
+    private:
+        void render(const GLCanvas3D& canvas, bool printable_only);
+        void render_objects(const std::vector<const GLVolume*>& volumes) const;
+    };
+
+} // namespace GUI
+} // namespace Slic3r
+
+#endif // ENABLE_THUMBNAIL_GENERATOR
+
+#endif // slic3r_GUI_ThumbnailGenerator_hpp_
+

From 4d1153c866bef9af7525ea4e1e7616b8e4acc115 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Wed, 23 Oct 2019 13:31:24 +0200
Subject: [PATCH 22/84] ENABLE_THUMBNAIL_GENERATOR -> WIP: Refactoring and
 preparation for adding thumbnails to exported gcode and 3mf files

---
 src/libslic3r/Format/3mf.cpp                | 103 ++++++++++++++++++++
 src/libslic3r/Format/3mf.hpp                |  13 +++
 src/libslic3r/GCode.cpp                     |  49 +++++++++-
 src/libslic3r/GCode.hpp                     |  21 ++++
 src/libslic3r/GCode/ThumbnailData.cpp       |  19 ++--
 src/libslic3r/GCode/ThumbnailData.hpp       |   2 +
 src/libslic3r/Print.cpp                     |  16 +++
 src/libslic3r/Print.hpp                     |  13 +++
 src/slic3r/GUI/BackgroundSlicingProcess.cpp |  12 ++-
 src/slic3r/GUI/BackgroundSlicingProcess.hpp |  17 ++++
 src/slic3r/GUI/GLCanvas3D.cpp               |   6 ++
 src/slic3r/GUI/Plater.cpp                   |  53 +++++++++-
 src/slic3r/GUI/Plater.hpp                   |   6 ++
 src/slic3r/GUI/ThumbnailGenerator.cpp       |  45 +++++----
 src/slic3r/GUI/ThumbnailGenerator.hpp       |  17 ++--
 15 files changed, 346 insertions(+), 46 deletions(-)

diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp
index 47a8e5280..a981cca61 100644
--- a/src/libslic3r/Format/3mf.cpp
+++ b/src/libslic3r/Format/3mf.cpp
@@ -3,6 +3,11 @@
 #include "../Utils.hpp"
 #include "../GCode.hpp"
 #include "../Geometry.hpp"
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+#include "../GCode/ThumbnailData.hpp"
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 #include "../I18N.hpp"
 
@@ -40,6 +45,11 @@ const std::string MODEL_EXTENSION = ".model";
 const std::string MODEL_FILE = "3D/3dmodel.model"; // << this is the only format of the string which works with CURA
 const std::string CONTENT_TYPES_FILE = "[Content_Types].xml";
 const std::string RELATIONSHIPS_FILE = "_rels/.rels";
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+const std::string THUMBNAIL_FILE = "Metadata/thumbnail.png";
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 const std::string PRINT_CONFIG_FILE = "Metadata/Slic3r_PE.config";
 const std::string MODEL_CONFIG_FILE = "Metadata/Slic3r_PE_model.config";
 const std::string LAYER_HEIGHTS_PROFILE_FILE = "Metadata/Slic3r_PE_layer_heights_profile.txt";
@@ -1806,11 +1816,32 @@ namespace Slic3r {
         typedef std::map<int, ObjectData> IdToObjectDataMap;
 
     public:
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        bool save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail = nullptr);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         bool save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     private:
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        bool _save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         bool _save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         bool _add_content_types_file_to_archive(mz_zip_archive& archive);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        bool _add_thumbnail_file_to_archive(mz_zip_archive& archive, const ThumbnailData& thumbnail);
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         bool _add_relationships_file_to_archive(mz_zip_archive& archive);
         bool _add_model_file_to_archive(mz_zip_archive& archive, const Model& model, IdToObjectDataMap &objects_data);
         bool _add_object_to_model_stream(std::stringstream& stream, unsigned int& object_id, ModelObject& object, BuildItemsList& build_items, VolumeToOffsetsMap& volumes_offsets);
@@ -1823,13 +1854,33 @@ namespace Slic3r {
         bool _add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, const IdToObjectDataMap &objects_data);
     };
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    bool _3MF_Exporter::save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail)
+    {
+        clear_errors();
+        return _save_model_to_file(filename, model, config, thumbnail);
+    }
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     bool _3MF_Exporter::save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config)
     {
         clear_errors();
         return _save_model_to_file(filename, model, config);
     }
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    bool _3MF_Exporter::_save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     bool _3MF_Exporter::_save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     {
         mz_zip_archive archive;
         mz_zip_zero_struct(&archive);
@@ -1848,6 +1899,21 @@ namespace Slic3r {
             return false;
         }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        if ((thumbnail != nullptr) && thumbnail->is_valid())
+        {
+            // Adds the file Metadata/thumbnail.png.
+            if (!_add_thumbnail_file_to_archive(archive, *thumbnail))
+            {
+                close_zip_writer(&archive);
+                boost::filesystem::remove(filename);
+                return false;
+            }
+        }
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
         // Adds relationships file ("_rels/.rels"). 
         // The content of this file is the same for each PrusaSlicer 3mf.
         // The relationshis file contains a reference to the geometry file "3D/3dmodel.model", the name was chosen to be compatible with CURA.
@@ -1941,6 +2007,11 @@ namespace Slic3r {
         stream << "<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n";
         stream << " <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" />\n";
         stream << " <Default Extension=\"model\" ContentType=\"application/vnd.ms-package.3dmanufacturing-3dmodel+xml\" />\n";
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        stream << " <Default Extension=\"png\" ContentType=\"image/png\" />\n";
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         stream << "</Types>";
 
         std::string out = stream.str();
@@ -1954,12 +2025,28 @@ namespace Slic3r {
         return true;
     }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    bool _3MF_Exporter::_add_thumbnail_file_to_archive(mz_zip_archive& archive, const ThumbnailData& thumbnail)
+    {
+        // TODO -> add Metadata/thumbnail.png file containing thumbnail_data
+
+        return true;
+    }
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     bool _3MF_Exporter::_add_relationships_file_to_archive(mz_zip_archive& archive)
     {
         std::stringstream stream;
         stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
         stream << "<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n";
         stream << " <Relationship Target=\"/" << MODEL_FILE << "\" Id=\"rel-1\" Type=\"http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel\" />\n";
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        stream << " <Relationship Target=\"/" << THUMBNAIL_FILE << "\" Id=\"rel-2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail\" />\n";
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         stream << "</Relationships>";
 
         std::string out = stream.str();
@@ -2453,13 +2540,29 @@ namespace Slic3r {
         return res;
     }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    bool store_3mf(const char* path, Model* model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     bool store_3mf(const char* path, Model* model, const DynamicPrintConfig* config)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     {
         if ((path == nullptr) || (model == nullptr))
             return false;
 
         _3MF_Exporter exporter;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        bool res = exporter.save_model_to_file(path, *model, config, thumbnail);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         bool res = exporter.save_model_to_file(path, *model, config);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
         if (!res)
             exporter.log_errors();
diff --git a/src/libslic3r/Format/3mf.hpp b/src/libslic3r/Format/3mf.hpp
index f387192ab..0ce6eb742 100644
--- a/src/libslic3r/Format/3mf.hpp
+++ b/src/libslic3r/Format/3mf.hpp
@@ -22,13 +22,26 @@ namespace Slic3r {
 
     class Model;
     class DynamicPrintConfig;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    struct ThumbnailData;
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     // Load the content of a 3mf file into the given model and preset bundle.
     extern bool load_3mf(const char* path, DynamicPrintConfig* config, Model* model, bool check_version);
 
     // Save the given model and the config data contained in the given Print into a 3mf file.
     // The model could be modified during the export process if meshes are not repaired or have no shared vertices
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    extern bool store_3mf(const char* path, Model* model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail = nullptr);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     extern bool store_3mf(const char* path, Model* model, const DynamicPrintConfig* config);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 }; // namespace Slic3r
 
diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 2d14155a3..13b417efa 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -6,6 +6,11 @@
 #include "Geometry.hpp"
 #include "GCode/PrintExtents.hpp"
 #include "GCode/WipeTower.hpp"
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+#include "GCode/ThumbnailData.hpp"
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #include "ShortestPath.hpp"
 #include "Utils.hpp"
 
@@ -652,7 +657,15 @@ std::vector<std::pair<coordf_t, std::vector<GCode::LayerToPrint>>> GCode::collec
     return layers_to_print;
 }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_data, const ThumbnailData* thumbnail_data)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_data)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     PROFILE_CLEAR();
 
@@ -678,7 +691,15 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_
 
     try {
         m_placeholder_parser_failed_templates.clear();
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        this->_do_export(*print, file, thumbnail_data);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         this->_do_export(*print, file);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         fflush(file);
         if (ferror(file)) {
             fclose(file);
@@ -742,7 +763,15 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_
     PROFILE_OUTPUT(debug_out_path("gcode-export-profile.txt").c_str());
 }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+void GCode::_do_export(Print& print, FILE* file, const ThumbnailData* thumbnail_data)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 void GCode::_do_export(Print &print, FILE *file)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     PROFILE_FUNC();
 
@@ -934,6 +963,21 @@ void GCode::_do_export(Print &print, FILE *file)
 
     // Write information on the generator.
     _write_format(file, "; %s\n\n", Slic3r::header_slic3r_generated().c_str());
+
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    // Write thumbnail
+    if ((thumbnail_data != nullptr) && thumbnail_data->is_valid())
+    {
+        _write(file, "\n;\n; thumbnail begin\n");
+
+        // TODO -> export content of thumbnail_data.pixels
+
+        _write(file, "; thumbnail end\n;\n\n");
+    }
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     // Write notes (content of the Print Settings tab -> Notes)
     {
         std::list<std::string> lines;
@@ -949,11 +993,6 @@ void GCode::_do_export(Print &print, FILE *file)
     }
     print.throw_if_canceled();
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_THUMBNAIL_GENERATOR
-#endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
     // Write some terse information on the slicing parameters.
     const PrintObject *first_object         = print.objects().front();
     const double       layer_height         = first_object->config().layer_height.value;
diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp
index 45ff7eda6..4c5b92bf1 100644
--- a/src/libslic3r/GCode.hpp
+++ b/src/libslic3r/GCode.hpp
@@ -30,6 +30,11 @@ namespace Slic3r {
 // Forward declarations.
 class GCode;
 class GCodePreviewData;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+struct ThumbnailData;
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 class AvoidCrossingPerimeters {
 public:
@@ -162,7 +167,15 @@ public:
 
     // throws std::runtime_exception on error,
     // throws CanceledException through print->throw_if_canceled().
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    void            do_export(Print* print, const char* path, GCodePreviewData* preview_data = nullptr, const ThumbnailData* thumbnail_data = nullptr);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     void            do_export(Print *print, const char *path, GCodePreviewData *preview_data = nullptr);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     // Exported for the helper classes (OozePrevention, Wipe) and for the Perl binding for unit tests.
     const Vec2d&    origin() const { return m_origin; }
@@ -190,7 +203,15 @@ public:
     static void append_full_config(const Print& print, std::string& str);
 
 protected:
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    void            _do_export(Print& print, FILE* file, const ThumbnailData* thumbnail_data);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     void            _do_export(Print &print, FILE *file);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif //ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     // Object and support extrusions of the same PrintObject at the same print_z.
     struct LayerToPrint
diff --git a/src/libslic3r/GCode/ThumbnailData.cpp b/src/libslic3r/GCode/ThumbnailData.cpp
index 17ccbdeb6..80165916b 100644
--- a/src/libslic3r/GCode/ThumbnailData.cpp
+++ b/src/libslic3r/GCode/ThumbnailData.cpp
@@ -7,16 +7,16 @@ namespace Slic3r {
 
 void ThumbnailData::set(unsigned int w, unsigned int h)
 {
-    if (!pixels.empty())
-        reset();
-
     if ((w == 0) || (h == 0))
         return;
 
-    width = w;
-    height = h;
-    // defaults to white texture
-    pixels = std::vector<unsigned char>(width * height * 4, 255);
+    if ((width != w) || (height != h))
+    {
+        width = w;
+        height = h;
+        // defaults to white texture
+        pixels = std::vector<unsigned char>(width * height * 4, 255);
+    }
 }
 
 void ThumbnailData::reset()
@@ -26,6 +26,11 @@ void ThumbnailData::reset()
     pixels.clear();
 }
 
+bool ThumbnailData::is_valid() const
+{
+    return (width != 0) && (height != 0) && ((unsigned int)pixels.size() == 4 * width * height);
+}
+
 } // namespace Slic3r
 
 #endif // ENABLE_THUMBNAIL_GENERATOR
\ No newline at end of file
diff --git a/src/libslic3r/GCode/ThumbnailData.hpp b/src/libslic3r/GCode/ThumbnailData.hpp
index 193068ebe..9823ffd31 100644
--- a/src/libslic3r/GCode/ThumbnailData.hpp
+++ b/src/libslic3r/GCode/ThumbnailData.hpp
@@ -16,6 +16,8 @@ struct ThumbnailData
     ThumbnailData() { reset(); }
     void set(unsigned int w, unsigned int h);
     void reset();
+
+    bool is_valid() const;
 };
 
 } // namespace Slic3r
diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp
index 88645df15..742a2a960 100644
--- a/src/libslic3r/Print.cpp
+++ b/src/libslic3r/Print.cpp
@@ -1536,7 +1536,15 @@ void Print::process()
 // The export_gcode may die for various reasons (fails to process output_filename_format,
 // write error into the G-code, cannot execute post-processing scripts).
 // It is up to the caller to show an error message.
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+std::string Print::export_gcode(const std::string& path_template, GCodePreviewData* preview_data, const ThumbnailData* thumbnail_data)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 std::string Print::export_gcode(const std::string &path_template, GCodePreviewData *preview_data)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     // output everything to a G-code file
     // The following call may die if the output_filename_format template substitution fails.
@@ -1553,7 +1561,15 @@ std::string Print::export_gcode(const std::string &path_template, GCodePreviewDa
 
     // The following line may die for multiple reasons.
     GCode gcode;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    gcode.do_export(this, path.c_str(), preview_data, thumbnail_data);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     gcode.do_export(this, path.c_str(), preview_data);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     return path.c_str();
 }
 
diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp
index 6d94a515f..8dc54ee1d 100644
--- a/src/libslic3r/Print.hpp
+++ b/src/libslic3r/Print.hpp
@@ -19,6 +19,11 @@ class PrintObject;
 class ModelObject;
 class GCode;
 class GCodePreviewData;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+struct ThumbnailData;
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 // Print step IDs for keeping track of the print state.
 enum PrintStep {
@@ -305,7 +310,15 @@ public:
     void                process() override;
     // Exports G-code into a file name based on the path_template, returns the file path of the generated G-code file.
     // If preview_data is not null, the preview_data is filled in for the G-code visualization (not used by the command line Slic3r).
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    std::string         export_gcode(const std::string& path_template, GCodePreviewData* preview_data, const ThumbnailData* thumbnail_data = nullptr);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     std::string         export_gcode(const std::string &path_template, GCodePreviewData *preview_data);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     // methods for handling state
     bool                is_step_done(PrintStep step) const { return Inherited::is_step_done(step); }
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index a1db6884e..9d53d60b2 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -82,8 +82,16 @@ void BackgroundSlicingProcess::process_fff()
 	assert(m_print == m_fff_print);
     m_print->process();
 	wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_slicing_completed_id));
-	m_fff_print->export_gcode(m_temp_output_path, m_gcode_preview_data);
-	if (this->set_step_started(bspsGCodeFinalize)) {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    m_fff_print->export_gcode(m_temp_output_path, m_gcode_preview_data, m_thumbnail_data);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    m_fff_print->export_gcode(m_temp_output_path, m_gcode_preview_data);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    if (this->set_step_started(bspsGCodeFinalize)) {
 	    if (! m_export_path.empty()) {
 	    	//FIXME localize the messages
 	    	// Perform the final post-processing of the export path by applying the print statistics over the file name.
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
index cf5edd55f..af20554df 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
@@ -17,6 +17,11 @@ namespace Slic3r {
 
 class DynamicPrintConfig;
 class GCodePreviewData;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+struct ThumbnailData;
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 class Model;
 class SLAPrint;
 
@@ -49,6 +54,12 @@ public:
 	void set_fff_print(Print *print) { m_fff_print = print; }
 	void set_sla_print(SLAPrint *print) { m_sla_print = print; }
 	void set_gcode_preview_data(GCodePreviewData *gpd) { m_gcode_preview_data = gpd; }
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    void set_thumbnail_data(const ThumbnailData* data) { m_thumbnail_data = data; }
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
 	// The following wxCommandEvent will be sent to the UI thread / Platter window, when the slicing is finished
 	// and the background processing will transition into G-code export.
 	// The wxCommandEvent is sent to the UI thread asynchronously without waiting for the event to be processed.
@@ -151,6 +162,12 @@ private:
 	SLAPrint 				   *m_sla_print			 = nullptr;
 	// Data structure, to which the G-code export writes its annotations.
 	GCodePreviewData 		   *m_gcode_preview_data = nullptr;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    // Data structure, used to write thumbnail into gcode.
+    const ThumbnailData        *m_thumbnail_data = nullptr;
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 	// Temporary G-code, there is one defined for the BackgroundSlicingProcess, differentiated from the other processes by a process ID.
 	std::string 				m_temp_output_path;
 	// Output path provided by the user. The output path may be set even if the slicing is running,
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index c55d64b47..4e72d1526 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2108,6 +2108,12 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
             manip->set_dirty();
     }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+//#if ENABLE_THUMBNAIL_GENERATOR
+//    wxGetApp().plater()->generate_thumbnail(256, 256, true);
+//#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     // and force this canvas to be redrawn.
     m_dirty = true;
 }
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 4c44cce75..66fb72bbc 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1926,6 +1926,12 @@ struct Plater::priv
     bool can_mirror() const;
     bool can_reload_from_disk() const;
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    void generate_thumbnail(unsigned int w, unsigned int h, bool printable_only);
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     void msw_rescale_object_menu();
 
     // returns the path to project file with the given extension (none if extension == wxEmptyString)
@@ -1993,6 +1999,11 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
     background_process.set_fff_print(&fff_print);
     background_process.set_sla_print(&sla_print);
     background_process.set_gcode_preview_data(&gcode_preview_data);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    background_process.set_thumbnail_data(&thumbnail_generator.get_data());
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     background_process.set_slicing_completed_event(EVT_SLICING_COMPLETED);
     background_process.set_finished_event(EVT_PROCESS_COMPLETED);
     // Default printer technology for default config.
@@ -3037,6 +3048,16 @@ bool Plater::priv::restart_background_process(unsigned int state)
          ( ((state & UPDATE_BACKGROUND_PROCESS_FORCE_RESTART) != 0 && ! this->background_process.finished()) ||
            (state & UPDATE_BACKGROUND_PROCESS_FORCE_EXPORT) != 0 ||
            (state & UPDATE_BACKGROUND_PROCESS_RESTART) != 0 ) ) {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        if ((state & UPDATE_BACKGROUND_PROCESS_FORCE_EXPORT) == 0)
+        {
+            // force update of thumbnail data, so that they can be inserted into the exported gcode
+            thumbnail_generator.generate(view3D->get_canvas3d()->get_volumes().volumes, 256, 256, true);
+            thumbnail_generator.save_to_png_file("C:/prusa/test/test.png");
+        }
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         // The print is valid and it can be started.
         if (this->background_process.start()) {
             this->statusbar()->set_cancel_callback([this]() {
@@ -3070,11 +3091,6 @@ void Plater::priv::export_gcode(fs::path output_path, PrintHostJob upload_job)
         return;
 
     if (! output_path.empty()) {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_THUMBNAIL_GENERATOR
-        thumbnail_generator.render_to_png_file(*view3D->get_canvas3d(), "C:/prusa/test/test.png", 256, 256, false);
-#endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         background_process.schedule_export(output_path.string());
     } else {
         background_process.schedule_upload(std::move(upload_job));
@@ -3604,6 +3620,15 @@ bool Plater::priv::init_object_menu()
     return true;
 }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+void Plater::priv::generate_thumbnail(unsigned int w, unsigned int h, bool printable_only)
+{
+    thumbnail_generator.generate(view3D->get_canvas3d()->get_volumes().volumes, w, h, printable_only);
+}
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
 void Plater::priv::msw_rescale_object_menu()
 {
     for (MenuWithSeparators* menu : { &object_menu, &sla_object_menu, &part_menu, &default_menu })
@@ -4642,7 +4667,16 @@ void Plater::export_3mf(const boost::filesystem::path& output_path)
     DynamicPrintConfig cfg = wxGetApp().preset_bundle->full_config_secure();
     const std::string path_u8 = into_u8(path);
     wxBusyCursor wait;
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    p->generate_thumbnail(128, 128, false);
+    if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr, &p->thumbnail_generator.get_data())) {
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr)) {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         // Success
         p->statusbar()->set_status_text(wxString::Format(_(L("3MF file exported to %s")), path));
         p->set_project_filename(path);
@@ -5139,6 +5173,15 @@ void Plater::paste_from_clipboard()
     p->view3D->get_canvas3d()->get_selection().paste_from_clipboard();
 }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+void Plater::generate_thumbnail(unsigned int w, unsigned int h, bool printable_only)
+{
+    p->generate_thumbnail(w, h, printable_only);
+}
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
 void Plater::msw_rescale()
 {
     p->preview->msw_rescale();
diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp
index 00ceb89bc..b14cff65a 100644
--- a/src/slic3r/GUI/Plater.hpp
+++ b/src/slic3r/GUI/Plater.hpp
@@ -240,6 +240,12 @@ public:
     void copy_selection_to_clipboard();
     void paste_from_clipboard();
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    void generate_thumbnail(unsigned int w, unsigned int h, bool printable_only);
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
     bool can_delete() const;
     bool can_delete_all() const;
     bool can_increase_instances() const;
diff --git a/src/slic3r/GUI/ThumbnailGenerator.cpp b/src/slic3r/GUI/ThumbnailGenerator.cpp
index db823cc0b..a50c5541c 100644
--- a/src/slic3r/GUI/ThumbnailGenerator.cpp
+++ b/src/slic3r/GUI/ThumbnailGenerator.cpp
@@ -3,9 +3,12 @@
 
 #if ENABLE_THUMBNAIL_GENERATOR
 
-#include "GLCanvas3D.hpp"
+#include "Camera.hpp"
 #include "3DScene.hpp"
+#include "GUI.hpp"
 
+#include <boost/filesystem.hpp>
+#include <boost/algorithm/string/predicate.hpp>
 #include <GL/glew.h>
 
 namespace Slic3r {
@@ -16,10 +19,18 @@ void ThumbnailGenerator::reset()
     m_data.reset();
 }
 
-bool ThumbnailGenerator::render_to_png_file(const GLCanvas3D& canvas, const std::string& filename, unsigned int w, unsigned int h, bool printable_only)
+void ThumbnailGenerator::generate(const GLVolumePtrs& volumes, unsigned int w, unsigned int h, bool printable_only)
 {
+    std::cout << "Generated thumbnail " << w << "x" << h << std::endl;
+
     m_data.set(w, h);
-    render(canvas, printable_only);
+    render_and_store(volumes, printable_only);
+}
+
+bool ThumbnailGenerator::save_to_png_file(const std::string& filename)
+{
+    if (!m_data.is_valid())
+        return false;
 
     wxImage image(m_data.width, m_data.height);
     image.InitAlpha();
@@ -30,24 +41,26 @@ bool ThumbnailGenerator::render_to_png_file(const GLCanvas3D& canvas, const std:
         for (unsigned int c = 0; c < m_data.width; ++c)
         {
             unsigned char* px = m_data.pixels.data() + 4 * (rr + c);
-//            unsigned char* px = m_data.pixels.data() + 4 * (r * m_data.width + c);
             image.SetRGB((int)c, (int)r, px[0], px[1], px[2]);
             image.SetAlpha((int)c, (int)r, px[3]);
         }
     }
 
-    image.SaveFile(filename, wxBITMAP_TYPE_PNG);
+    std::string path = filename;
+    if (!boost::iends_with(path, ".png"))
+        path = boost::filesystem::path(path).replace_extension(".png").string();
 
-    return true;
+    return image.SaveFile(from_u8(path), wxBITMAP_TYPE_PNG);
 }
 
-void ThumbnailGenerator::render(const GLCanvas3D& canvas, bool printable_only)
+void ThumbnailGenerator::render_and_store(const GLVolumePtrs& volumes, bool printable_only)
 {
-    const GLVolumeCollection& volumes = canvas.get_volumes();
+    static const float orange[] = { 0.99f, 0.49f, 0.26f };
+    static const float gray[] = { 0.64f, 0.64f, 0.64f };
 
-    std::vector<const GLVolume*> visible_volumes;
+    GLVolumeConstPtrs visible_volumes;
 
-    for (const GLVolume* vol : volumes.volumes)
+    for (const GLVolume* vol : volumes)
     {
         if (!printable_only || vol->printable)
             visible_volumes.push_back(vol);
@@ -69,19 +82,10 @@ void ThumbnailGenerator::render(const GLCanvas3D& canvas, bool printable_only)
     camera.apply_projection(box);
 
     glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
-    render_objects(visible_volumes);
-    glsafe(::glReadPixels(0, 0, m_data.width, m_data.height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)m_data.pixels.data()));
-}
-
-void ThumbnailGenerator::render_objects(const std::vector<const GLVolume*>& volumes) const
-{
-    static const float orange[] = { 0.99f, 0.49f, 0.26f };
-    static const float gray[]   = { 0.64f, 0.64f, 0.64f };
-
     glsafe(::glEnable(GL_LIGHTING));
     glsafe(::glEnable(GL_DEPTH_TEST));
 
-    for (const GLVolume* vol : volumes)
+    for (const GLVolume* vol : visible_volumes)
     {
         glsafe(::glColor3fv(vol->printable ? orange : gray));
         vol->render();
@@ -89,6 +93,7 @@ void ThumbnailGenerator::render_objects(const std::vector<const GLVolume*>& volu
 
     glsafe(::glDisable(GL_DEPTH_TEST));
     glsafe(::glDisable(GL_LIGHTING));
+    glsafe(::glReadPixels(0, 0, m_data.width, m_data.height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)m_data.pixels.data()));
 }
 
 } // namespace GUI
diff --git a/src/slic3r/GUI/ThumbnailGenerator.hpp b/src/slic3r/GUI/ThumbnailGenerator.hpp
index 1c3aef76c..e632106cd 100644
--- a/src/slic3r/GUI/ThumbnailGenerator.hpp
+++ b/src/slic3r/GUI/ThumbnailGenerator.hpp
@@ -5,15 +5,15 @@
 
 #include "../libslic3r/GCode/ThumbnailData.hpp"
 
-#include <array>
-
 namespace Slic3r {
     class GLVolume;
-namespace GUI {
-    class GLCanvas3D;
+    typedef std::vector<GLVolume*> GLVolumePtrs;
+    namespace GUI {
 
     class ThumbnailGenerator
     {
+        typedef std::vector<const GLVolume*> GLVolumeConstPtrs;
+
         ThumbnailData m_data;
 
     public:
@@ -21,11 +21,14 @@ namespace GUI {
 
         void reset();
 
-        bool render_to_png_file(const GLCanvas3D& canvas, const std::string& filename, unsigned int w, unsigned int h, bool printable_only);
+        void generate(const GLVolumePtrs& volumes, unsigned int w, unsigned int h, bool printable_only);
+
+        const ThumbnailData& get_data() const { return m_data; }
+
+        bool save_to_png_file(const std::string& filename);
 
     private:
-        void render(const GLCanvas3D& canvas, bool printable_only);
-        void render_objects(const std::vector<const GLVolume*>& volumes) const;
+        void render_and_store(const GLVolumePtrs& volumes, bool printable_only);
     };
 
 } // namespace GUI

From 16fd2820db44a34acb4f7aee1295c8ce05996530 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Wed, 23 Oct 2019 16:01:23 +0200
Subject: [PATCH 23/84] ENABLE_THUMBNAIL_GENERATOR -> WIP: Added missing
 include and preparation for adding thumbnail to exported sla archive files

---
 src/libslic3r/SLA/SLARasterWriter.cpp       | 16 +++++++++++++++-
 src/libslic3r/SLA/SLARasterWriter.hpp       | 18 ++++++++++++++++++
 src/libslic3r/SLAPrint.hpp                  | 12 ++++++++++++
 src/slic3r/GUI/BackgroundSlicingProcess.cpp | 18 +++++++++++++++++-
 src/slic3r/GUI/GLCanvas3D.cpp               |  6 ------
 src/slic3r/GUI/Plater.cpp                   |  5 +++++
 src/slic3r/GUI/ThumbnailGenerator.cpp       |  2 ++
 7 files changed, 69 insertions(+), 8 deletions(-)

diff --git a/src/libslic3r/SLA/SLARasterWriter.cpp b/src/libslic3r/SLA/SLARasterWriter.cpp
index f80ce01ab..27ffb8392 100644
--- a/src/libslic3r/SLA/SLARasterWriter.cpp
+++ b/src/libslic3r/SLA/SLARasterWriter.cpp
@@ -28,7 +28,15 @@ RasterWriter::RasterWriter(const Raster::Resolution &res,
     : m_res(res), m_pxdim(pixdim), m_trafo(trafo), m_gamma(gamma)
 {}
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+void RasterWriter::save(const std::string& fpath, const ThumbnailData* thumbnail_data, const std::string& prjname)
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 void RasterWriter::save(const std::string &fpath, const std::string &prjname)
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     try {
         Zipper zipper(fpath); // zipper with no compression
@@ -37,7 +45,13 @@ void RasterWriter::save(const std::string &fpath, const std::string &prjname)
                     boost::filesystem::path(fpath).stem().string() : prjname;
         
         zipper.add_entry("config.ini");
-        
+
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        // TODO add thumbnail_data as thumbnail.png file
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
         zipper << createIniContent(project);
         
         for(unsigned i = 0; i < m_layers_rst.size(); i++)
diff --git a/src/libslic3r/SLA/SLARasterWriter.hpp b/src/libslic3r/SLA/SLARasterWriter.hpp
index c231655d2..180ea3b8a 100644
--- a/src/libslic3r/SLA/SLARasterWriter.hpp
+++ b/src/libslic3r/SLA/SLARasterWriter.hpp
@@ -13,7 +13,17 @@
 
 #include "SLARaster.hpp"
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+namespace Slic3r { 
+struct ThumbnailData;
+namespace sla {
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 namespace Slic3r { namespace sla {
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 // API to write the zipped sla output layers and metadata.
 // Implementation uses PNG raster output.
@@ -111,7 +121,15 @@ public:
         }
     }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    void save(const std::string& fpath, const ThumbnailData* thumbnail_data = nullptr, const std::string& prjname = "");
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     void save(const std::string &fpath, const std::string &prjname = "");
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     void set_statistics(const PrintStatistics &statistics);
     
diff --git a/src/libslic3r/SLAPrint.hpp b/src/libslic3r/SLAPrint.hpp
index 2dc2a9040..0c6b93771 100644
--- a/src/libslic3r/SLAPrint.hpp
+++ b/src/libslic3r/SLAPrint.hpp
@@ -358,11 +358,23 @@ public:
     // Returns true if the last step was finished with success.
     bool                finished() const override { return this->is_step_done(slaposSliceSupports) && this->Inherited::is_step_done(slapsRasterize); }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+    inline void export_raster(const std::string& fpath, const ThumbnailData* thumbnail_data = nullptr,
+        const std::string& projectname = "")
+    {
+        if (m_printer) m_printer->save(fpath, thumbnail_data, projectname);
+    }
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     inline void export_raster(const std::string& fpath,
                               const std::string& projectname = "")
     {
         if(m_printer) m_printer->save(fpath, projectname);
     }
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     const PrintObjects& objects() const { return m_objects; }
 
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index 9d53d60b2..6def49d69 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -117,7 +117,15 @@ void BackgroundSlicingProcess::process_sla()
     if (this->set_step_started(bspsGCodeFinalize)) {
         if (! m_export_path.empty()) {
         	const std::string export_path = m_sla_print->print_statistics().finalize_output_path(m_export_path);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+            m_sla_print->export_raster(export_path, m_thumbnail_data);
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             m_sla_print->export_raster(export_path);
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
             m_print->set_status(100, (boost::format(_utf8(L("Masked SLA file exported to %1%"))) % export_path).str());
         } else if (! m_upload_job.empty()) {
             prepare_upload();
@@ -428,8 +436,16 @@ void BackgroundSlicingProcess::prepare_upload()
 		m_upload_job.upload_data.upload_path = m_fff_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string());
     } else {
 		m_upload_job.upload_data.upload_path = m_sla_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string());
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+        m_sla_print->export_raster(source_path.string(), m_thumbnail_data, m_upload_job.upload_data.upload_path.string());
+#else
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         m_sla_print->export_raster(source_path.string(), m_upload_job.upload_data.upload_path.string());
-	}
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    }
 
 	m_print->set_status(100, (boost::format(_utf8(L("Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"))) % m_upload_job.printhost->get_host()).str());
 
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 4e72d1526..c55d64b47 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2108,12 +2108,6 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
             manip->set_dirty();
     }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-//#if ENABLE_THUMBNAIL_GENERATOR
-//    wxGetApp().plater()->generate_thumbnail(256, 256, true);
-//#endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
     // and force this canvas to be redrawn.
     m_dirty = true;
 }
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 66fb72bbc..25331191b 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -3395,6 +3395,11 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
     } else if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SLA_PREVIEW) {
         // Update the SLA preview. Only called if not RELOAD_SLA_SUPPORT_POINTS, as the block above will refresh the preview anyways.
         this->preview->reload_print();
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+//#if ENABLE_THUMBNAIL_GENERATOR
+//        thumbnail_generator.generate(view3D->get_canvas3d()->get_volumes().volumes, 256, 256, true);
+//#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 }
 
diff --git a/src/slic3r/GUI/ThumbnailGenerator.cpp b/src/slic3r/GUI/ThumbnailGenerator.cpp
index a50c5541c..37794dddf 100644
--- a/src/slic3r/GUI/ThumbnailGenerator.cpp
+++ b/src/slic3r/GUI/ThumbnailGenerator.cpp
@@ -11,6 +11,8 @@
 #include <boost/algorithm/string/predicate.hpp>
 #include <GL/glew.h>
 
+#include <wx/image.h>
+
 namespace Slic3r {
 namespace GUI {
 

From 77c52b748c3843aa1b29733022afeba5d3d0643d Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Wed, 23 Oct 2019 17:10:14 +0200
Subject: [PATCH 24/84] Zipper made available for modification after
 RasterWriter finishes.

---
 src/libslic3r/SLA/SLARasterWriter.cpp       | 41 ++++++++++----------
 src/libslic3r/SLA/SLARasterWriter.hpp       | 22 ++---------
 src/libslic3r/SLAPrint.hpp                  | 19 ++++------
 src/libslic3r/Zipper.cpp                    |  5 +++
 src/libslic3r/Zipper.hpp                    |  2 +
 src/slic3r/GUI/BackgroundSlicingProcess.cpp | 42 +++++++++++++--------
 6 files changed, 63 insertions(+), 68 deletions(-)

diff --git a/src/libslic3r/SLA/SLARasterWriter.cpp b/src/libslic3r/SLA/SLARasterWriter.cpp
index 27ffb8392..6ac86827e 100644
--- a/src/libslic3r/SLA/SLARasterWriter.cpp
+++ b/src/libslic3r/SLA/SLARasterWriter.cpp
@@ -28,47 +28,44 @@ RasterWriter::RasterWriter(const Raster::Resolution &res,
     : m_res(res), m_pxdim(pixdim), m_trafo(trafo), m_gamma(gamma)
 {}
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_THUMBNAIL_GENERATOR
-void RasterWriter::save(const std::string& fpath, const ThumbnailData* thumbnail_data, const std::string& prjname)
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 void RasterWriter::save(const std::string &fpath, const std::string &prjname)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     try {
         Zipper zipper(fpath); // zipper with no compression
-        
-        std::string project = prjname.empty()?
-                    boost::filesystem::path(fpath).stem().string() : prjname;
-        
+        save(zipper, prjname);
+        zipper.finalize();
+    } catch(std::exception& e) {
+        BOOST_LOG_TRIVIAL(error) << e.what();
+        // Rethrow the exception
+        throw;
+    }
+}
+
+void RasterWriter::save(Zipper &zipper, const std::string &prjname)
+{
+    try {
+        std::string project =
+            prjname.empty() ?
+                boost::filesystem::path(zipper.get_filename()).stem().string() :
+                prjname;
+
         zipper.add_entry("config.ini");
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_THUMBNAIL_GENERATOR
-        // TODO add thumbnail_data as thumbnail.png file
-#endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-
         zipper << createIniContent(project);
-        
+
         for(unsigned i = 0; i < m_layers_rst.size(); i++)
         {
             if(m_layers_rst[i].rawbytes.size() > 0) {
                 char lyrnum[6];
                 std::sprintf(lyrnum, "%.5d", i);
                 auto zfilename = project + lyrnum + ".png";
-                
+
                 // Add binary entry to the zipper
                 zipper.add_entry(zfilename,
                                  m_layers_rst[i].rawbytes.data(),
                                  m_layers_rst[i].rawbytes.size());
             }
         }
-        
-        zipper.finalize();
     } catch(std::exception& e) {
         BOOST_LOG_TRIVIAL(error) << e.what();
         // Rethrow the exception
diff --git a/src/libslic3r/SLA/SLARasterWriter.hpp b/src/libslic3r/SLA/SLARasterWriter.hpp
index 180ea3b8a..93a315c82 100644
--- a/src/libslic3r/SLA/SLARasterWriter.hpp
+++ b/src/libslic3r/SLA/SLARasterWriter.hpp
@@ -12,18 +12,9 @@
 #include "libslic3r/PrintConfig.hpp"
 
 #include "SLARaster.hpp"
+#include "libslic3r/Zipper.hpp"
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_THUMBNAIL_GENERATOR
-namespace Slic3r { 
-struct ThumbnailData;
-namespace sla {
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 namespace Slic3r { namespace sla {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 // API to write the zipped sla output layers and metadata.
 // Implementation uses PNG raster output.
@@ -121,18 +112,11 @@ public:
         }
     }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_THUMBNAIL_GENERATOR
-    void save(const std::string& fpath, const ThumbnailData* thumbnail_data = nullptr, const std::string& prjname = "");
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     void save(const std::string &fpath, const std::string &prjname = "");
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+    void save(Zipper &zipper, const std::string &prjname = "");
 
     void set_statistics(const PrintStatistics &statistics);
-    
+
     void set_config(const DynamicPrintConfig &cfg);
 };
 
diff --git a/src/libslic3r/SLAPrint.hpp b/src/libslic3r/SLAPrint.hpp
index 0c6b93771..8f386d407 100644
--- a/src/libslic3r/SLAPrint.hpp
+++ b/src/libslic3r/SLAPrint.hpp
@@ -7,6 +7,7 @@
 #include "SLA/SLARasterWriter.hpp"
 #include "Point.hpp"
 #include "MTUtils.hpp"
+#include "Zipper.hpp"
 #include <libnest2d/backends/clipper/clipper_polygon.hpp>
 
 namespace Slic3r {
@@ -358,23 +359,17 @@ public:
     // Returns true if the last step was finished with success.
     bool                finished() const override { return this->is_step_done(slaposSliceSupports) && this->Inherited::is_step_done(slapsRasterize); }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#if ENABLE_THUMBNAIL_GENERATOR
-    inline void export_raster(const std::string& fpath, const ThumbnailData* thumbnail_data = nullptr,
-        const std::string& projectname = "")
-    {
-        if (m_printer) m_printer->save(fpath, thumbnail_data, projectname);
-    }
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     inline void export_raster(const std::string& fpath,
                               const std::string& projectname = "")
     {
         if(m_printer) m_printer->save(fpath, projectname);
     }
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-#endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+    inline void export_raster(Zipper &zipper,
+                              const std::string& projectname = "")
+    {
+        if(m_printer) m_printer->save(zipper, projectname);
+    }
 
     const PrintObjects& objects() const { return m_objects; }
 
diff --git a/src/libslic3r/Zipper.cpp b/src/libslic3r/Zipper.cpp
index 348be49cc..a5b53584d 100644
--- a/src/libslic3r/Zipper.cpp
+++ b/src/libslic3r/Zipper.cpp
@@ -217,4 +217,9 @@ void Zipper::finalize()
         m_impl->blow_up();
 }
 
+const std::string &Zipper::get_filename() const
+{
+    return m_impl->m_zipname;
+}
+
 }
diff --git a/src/libslic3r/Zipper.hpp b/src/libslic3r/Zipper.hpp
index a574de959..be1e69b5c 100644
--- a/src/libslic3r/Zipper.hpp
+++ b/src/libslic3r/Zipper.hpp
@@ -83,6 +83,8 @@ public:
     void finish_entry();
 
     void finalize();
+
+    const std::string & get_filename() const;
 };
 
 
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index 6def49d69..39c6e47ef 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -107,25 +107,37 @@ void BackgroundSlicingProcess::process_fff()
 			m_print->set_status(100, _utf8(L("Slicing complete")));
 	    }
 		this->set_step_done(bspsGCodeFinalize);
-	}
+    }
 }
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+static void write_thumbnail(Zipper &zipper, const ThumbnailData &data)
+{
+    // TODO add thumbnail_data as thumbnail.png file to the zipper with
+    // void Zipper::add_entry(const std::string& name, const std::uint8_t* data, size_t l);
+}
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
 void BackgroundSlicingProcess::process_sla()
 {
     assert(m_print == m_sla_print);
     m_print->process();
     if (this->set_step_started(bspsGCodeFinalize)) {
         if (! m_export_path.empty()) {
-        	const std::string export_path = m_sla_print->print_statistics().finalize_output_path(m_export_path);
+            const std::string export_path = m_sla_print->print_statistics().finalize_output_path(m_export_path);
+
+            Zipper zipper(export_path);
+            m_sla_print->export_raster(zipper);
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-            m_sla_print->export_raster(export_path, m_thumbnail_data);
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-            m_sla_print->export_raster(export_path);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+            if(m_thumbnail_data) write_thumbnail(zipper, *m_thumbnail_data);
 #endif // ENABLE_THUMBNAIL_GENERATOR
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
+            zipper.finalize();
+
             m_print->set_status(100, (boost::format(_utf8(L("Masked SLA file exported to %1%"))) % export_path).str());
         } else if (! m_upload_job.empty()) {
             prepare_upload();
@@ -433,21 +445,21 @@ void BackgroundSlicingProcess::prepare_upload()
 			throw std::runtime_error(_utf8(L("Copying of the temporary G-code to the output G-code failed")));
 		}
 		run_post_process_scripts(source_path.string(), m_fff_print->config());
-		m_upload_job.upload_data.upload_path = m_fff_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string());
+        m_upload_job.upload_data.upload_path = m_fff_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string());
     } else {
-		m_upload_job.upload_data.upload_path = m_sla_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string());
+        m_upload_job.upload_data.upload_path = m_sla_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string());
+
+        Zipper zipper{source_path.string()};
+        m_sla_print->export_raster(zipper, m_upload_job.upload_data.upload_path.string());
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-        m_sla_print->export_raster(source_path.string(), m_thumbnail_data, m_upload_job.upload_data.upload_path.string());
-#else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-        m_sla_print->export_raster(source_path.string(), m_upload_job.upload_data.upload_path.string());
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+        if (m_thumbnail_data) write_thumbnail(zipper, *m_thumbnail_data);
 #endif // ENABLE_THUMBNAIL_GENERATOR
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+        zipper.finalize();
     }
 
-	m_print->set_status(100, (boost::format(_utf8(L("Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"))) % m_upload_job.printhost->get_host()).str());
+    m_print->set_status(100, (boost::format(_utf8(L("Scheduling upload to `%1%`. See Window -> Print Host Upload Queue"))) % m_upload_job.printhost->get_host()).str());
 
 	m_upload_job.upload_data.source_path = std::move(source_path);
 

From ad0a9cf4390944deff74a45de65df2604c89dd18 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 24 Oct 2019 08:46:39 +0200
Subject: [PATCH 25/84] ENABLE_THUMBNAIL_GENERATOR -> Add file
 thumbnail/thumbnail.png into sla output

---
 src/slic3r/GUI/BackgroundSlicingProcess.cpp | 30 +++++++++++++++------
 src/slic3r/GUI/Plater.cpp                   |  6 ++---
 2 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index 39c6e47ef..3ef32ad64 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -10,12 +10,23 @@
 #include <wx/wfstream.h>
 #include <wx/zipstrm.h>
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+#include <miniz.h>
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
 // Print now includes tbb, and tbb includes Windows. This breaks compilation of wxWidgets if included before wx.
 #include "libslic3r/Print.hpp"
 #include "libslic3r/SLAPrint.hpp"
 #include "libslic3r/Utils.hpp"
 #include "libslic3r/GCode/PostProcessor.hpp"
 #include "libslic3r/GCode/PreviewData.hpp"
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+#include "libslic3r/GCode/ThumbnailData.hpp"
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #include "libslic3r/libslic3r.h"
 
 #include <cassert>
@@ -110,15 +121,18 @@ void BackgroundSlicingProcess::process_fff()
     }
 }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-static void write_thumbnail(Zipper &zipper, const ThumbnailData &data)
+static void write_thumbnail(Zipper& zipper, const ThumbnailData& data)
 {
-    // TODO add thumbnail_data as thumbnail.png file to the zipper with
-    // void Zipper::add_entry(const std::string& name, const std::uint8_t* data, size_t l);
+    size_t png_size = 0;
+    void* png_data = tdefl_write_image_to_png_file_in_memory_ex((const void*)data.pixels.data(), data.width, data.height, 4, &png_size, MZ_DEFAULT_LEVEL, 1);
+    if (png_data != nullptr)
+    {
+        zipper.add_entry("thumbnail/thumbnail.png", (const std::uint8_t*)png_data, png_size);
+        mz_free(png_data);
+    }
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 void BackgroundSlicingProcess::process_sla()
 {
@@ -130,11 +144,11 @@ void BackgroundSlicingProcess::process_sla()
 
             Zipper zipper(export_path);
             m_sla_print->export_raster(zipper);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
 #if ENABLE_THUMBNAIL_GENERATOR
-            if(m_thumbnail_data) write_thumbnail(zipper, *m_thumbnail_data);
+            if (m_thumbnail_data!= nullptr)
+                write_thumbnail(zipper, *m_thumbnail_data);
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
             zipper.finalize();
 
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 25331191b..71249bd90 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -3396,9 +3396,9 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
         // Update the SLA preview. Only called if not RELOAD_SLA_SUPPORT_POINTS, as the block above will refresh the preview anyways.
         this->preview->reload_print();
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-//#if ENABLE_THUMBNAIL_GENERATOR
-//        thumbnail_generator.generate(view3D->get_canvas3d()->get_volumes().volumes, 256, 256, true);
-//#endif // ENABLE_THUMBNAIL_GENERATOR
+#if ENABLE_THUMBNAIL_GENERATOR
+        thumbnail_generator.generate(view3D->get_canvas3d()->get_volumes().volumes, 256, 256, true);
+#endif // ENABLE_THUMBNAIL_GENERATOR
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 }

From 4517fcd997e0495045be6466bf11edad0ff9449c Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 24 Oct 2019 09:20:33 +0200
Subject: [PATCH 26/84] ENABLE_THUMBNAIL_GENERATOR -> Add file
 Metadata/thumbnail.png into 3mf output

---
 src/libslic3r/Format/3mf.cpp                | 75 +++++++--------------
 src/libslic3r/Format/3mf.hpp                |  8 +--
 src/slic3r/GUI/BackgroundSlicingProcess.cpp |  2 +-
 3 files changed, 26 insertions(+), 59 deletions(-)

diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp
index a981cca61..ff3cf777d 100644
--- a/src/libslic3r/Format/3mf.cpp
+++ b/src/libslic3r/Format/3mf.cpp
@@ -3,11 +3,9 @@
 #include "../Utils.hpp"
 #include "../GCode.hpp"
 #include "../Geometry.hpp"
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 #include "../GCode/ThumbnailData.hpp"
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 #include "../I18N.hpp"
 
@@ -45,11 +43,9 @@ const std::string MODEL_EXTENSION = ".model";
 const std::string MODEL_FILE = "3D/3dmodel.model"; // << this is the only format of the string which works with CURA
 const std::string CONTENT_TYPES_FILE = "[Content_Types].xml";
 const std::string RELATIONSHIPS_FILE = "_rels/.rels";
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 const std::string THUMBNAIL_FILE = "Metadata/thumbnail.png";
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 const std::string PRINT_CONFIG_FILE = "Metadata/Slic3r_PE.config";
 const std::string MODEL_CONFIG_FILE = "Metadata/Slic3r_PE_model.config";
 const std::string LAYER_HEIGHTS_PROFILE_FILE = "Metadata/Slic3r_PE_layer_heights_profile.txt";
@@ -1816,32 +1812,22 @@ namespace Slic3r {
         typedef std::map<int, ObjectData> IdToObjectDataMap;
 
     public:
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-        bool save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail = nullptr);
+        bool save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail_data = nullptr);
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         bool save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     private:
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-        bool _save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail);
+        bool _save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail_data);
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         bool _save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         bool _add_content_types_file_to_archive(mz_zip_archive& archive);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-        bool _add_thumbnail_file_to_archive(mz_zip_archive& archive, const ThumbnailData& thumbnail);
+        bool _add_thumbnail_file_to_archive(mz_zip_archive& archive, const ThumbnailData& thumbnail_data);
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         bool _add_relationships_file_to_archive(mz_zip_archive& archive);
         bool _add_model_file_to_archive(mz_zip_archive& archive, const Model& model, IdToObjectDataMap &objects_data);
         bool _add_object_to_model_stream(std::stringstream& stream, unsigned int& object_id, ModelObject& object, BuildItemsList& build_items, VolumeToOffsetsMap& volumes_offsets);
@@ -1854,33 +1840,25 @@ namespace Slic3r {
         bool _add_model_config_file_to_archive(mz_zip_archive& archive, const Model& model, const IdToObjectDataMap &objects_data);
     };
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-    bool _3MF_Exporter::save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail)
+    bool _3MF_Exporter::save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail_data)
     {
         clear_errors();
-        return _save_model_to_file(filename, model, config, thumbnail);
+        return _save_model_to_file(filename, model, config, thumbnail_data);
     }
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     bool _3MF_Exporter::save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config)
     {
         clear_errors();
         return _save_model_to_file(filename, model, config);
     }
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-    bool _3MF_Exporter::_save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail)
+    bool _3MF_Exporter::_save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail_data)
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     bool _3MF_Exporter::_save_model_to_file(const std::string& filename, Model& model, const DynamicPrintConfig* config)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     {
         mz_zip_archive archive;
         mz_zip_zero_struct(&archive);
@@ -1899,12 +1877,11 @@ namespace Slic3r {
             return false;
         }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-        if ((thumbnail != nullptr) && thumbnail->is_valid())
+        if ((thumbnail_data != nullptr) && thumbnail_data->is_valid())
         {
             // Adds the file Metadata/thumbnail.png.
-            if (!_add_thumbnail_file_to_archive(archive, *thumbnail))
+            if (!_add_thumbnail_file_to_archive(archive, *thumbnail_data))
             {
                 close_zip_writer(&archive);
                 boost::filesystem::remove(filename);
@@ -1912,7 +1889,6 @@ namespace Slic3r {
             }
         }
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
         // Adds relationships file ("_rels/.rels"). 
         // The content of this file is the same for each PrusaSlicer 3mf.
@@ -2007,11 +1983,9 @@ namespace Slic3r {
         stream << "<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n";
         stream << " <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" />\n";
         stream << " <Default Extension=\"model\" ContentType=\"application/vnd.ms-package.3dmanufacturing-3dmodel+xml\" />\n";
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
         stream << " <Default Extension=\"png\" ContentType=\"image/png\" />\n";
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         stream << "</Types>";
 
         std::string out = stream.str();
@@ -2025,16 +1999,25 @@ namespace Slic3r {
         return true;
     }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-    bool _3MF_Exporter::_add_thumbnail_file_to_archive(mz_zip_archive& archive, const ThumbnailData& thumbnail)
+    bool _3MF_Exporter::_add_thumbnail_file_to_archive(mz_zip_archive& archive, const ThumbnailData& thumbnail_data)
     {
-        // TODO -> add Metadata/thumbnail.png file containing thumbnail_data
+        bool res = false;
 
-        return true;
+        size_t png_size = 0;
+        void* png_data = tdefl_write_image_to_png_file_in_memory_ex((const void*)thumbnail_data.pixels.data(), thumbnail_data.width, thumbnail_data.height, 4, &png_size, MZ_DEFAULT_LEVEL, 1);
+        if (png_data != nullptr)
+        {
+            res = mz_zip_writer_add_mem(&archive, THUMBNAIL_FILE.c_str(), (const void*)png_data, png_size, MZ_DEFAULT_COMPRESSION);
+            mz_free(png_data);
+        }
+
+        if (!res)
+            add_error("Unable to add thumbnail file to archive");
+
+        return res;
     }
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     bool _3MF_Exporter::_add_relationships_file_to_archive(mz_zip_archive& archive)
     {
@@ -2042,11 +2025,9 @@ namespace Slic3r {
         stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
         stream << "<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n";
         stream << " <Relationship Target=\"/" << MODEL_FILE << "\" Id=\"rel-1\" Type=\"http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel\" />\n";
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
         stream << " <Relationship Target=\"/" << THUMBNAIL_FILE << "\" Id=\"rel-2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail\" />\n";
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         stream << "</Relationships>";
 
         std::string out = stream.str();
@@ -2540,29 +2521,21 @@ namespace Slic3r {
         return res;
     }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-    bool store_3mf(const char* path, Model* model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail)
+    bool store_3mf(const char* path, Model* model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail_data)
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     bool store_3mf(const char* path, Model* model, const DynamicPrintConfig* config)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     {
         if ((path == nullptr) || (model == nullptr))
             return false;
 
         _3MF_Exporter exporter;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-        bool res = exporter.save_model_to_file(path, *model, config, thumbnail);
+        bool res = exporter.save_model_to_file(path, *model, config, thumbnail_data);
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         bool res = exporter.save_model_to_file(path, *model, config);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
         if (!res)
             exporter.log_errors();
diff --git a/src/libslic3r/Format/3mf.hpp b/src/libslic3r/Format/3mf.hpp
index 0ce6eb742..2e85b7f59 100644
--- a/src/libslic3r/Format/3mf.hpp
+++ b/src/libslic3r/Format/3mf.hpp
@@ -22,26 +22,20 @@ namespace Slic3r {
 
     class Model;
     class DynamicPrintConfig;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     struct ThumbnailData;
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     // Load the content of a 3mf file into the given model and preset bundle.
     extern bool load_3mf(const char* path, DynamicPrintConfig* config, Model* model, bool check_version);
 
     // Save the given model and the config data contained in the given Print into a 3mf file.
     // The model could be modified during the export process if meshes are not repaired or have no shared vertices
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-    extern bool store_3mf(const char* path, Model* model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail = nullptr);
+    extern bool store_3mf(const char* path, Model* model, const DynamicPrintConfig* config, const ThumbnailData* thumbnail_data = nullptr);
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     extern bool store_3mf(const char* path, Model* model, const DynamicPrintConfig* config);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 }; // namespace Slic3r
 
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index 3ef32ad64..67860138a 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -146,7 +146,7 @@ void BackgroundSlicingProcess::process_sla()
             m_sla_print->export_raster(zipper);
 
 #if ENABLE_THUMBNAIL_GENERATOR
-            if (m_thumbnail_data!= nullptr)
+            if ((m_thumbnail_data != nullptr) && m_thumbnail_data->is_valid())
                 write_thumbnail(zipper, *m_thumbnail_data);
 #endif // ENABLE_THUMBNAIL_GENERATOR
 

From 5609f537979878673275ca30dd6e122e197b38ca Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 24 Oct 2019 10:06:31 +0200
Subject: [PATCH 27/84] ENABLE_THUMBNAIL_GENERATOR -> Add thumbnail data into
 gcode output

---
 src/libslic3r/GCode.cpp   | 25 ++++++++-----------------
 src/libslic3r/GCode.hpp   | 10 ----------
 src/slic3r/GUI/Plater.cpp | 27 ++++++++++++++++++---------
 3 files changed, 26 insertions(+), 36 deletions(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 13b417efa..2ea8eae1d 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -6,11 +6,9 @@
 #include "Geometry.hpp"
 #include "GCode/PrintExtents.hpp"
 #include "GCode/WipeTower.hpp"
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 #include "GCode/ThumbnailData.hpp"
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #include "ShortestPath.hpp"
 #include "Utils.hpp"
 
@@ -657,15 +655,11 @@ std::vector<std::pair<coordf_t, std::vector<GCode::LayerToPrint>>> GCode::collec
     return layers_to_print;
 }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_data, const ThumbnailData* thumbnail_data)
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_data)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     PROFILE_CLEAR();
 
@@ -691,15 +685,11 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_
 
     try {
         m_placeholder_parser_failed_templates.clear();
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
         this->_do_export(*print, file, thumbnail_data);
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         this->_do_export(*print, file);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         fflush(file);
         if (ferror(file)) {
             fclose(file);
@@ -763,15 +753,11 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_
     PROFILE_OUTPUT(debug_out_path("gcode-export-profile.txt").c_str());
 }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 void GCode::_do_export(Print& print, FILE* file, const ThumbnailData* thumbnail_data)
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 void GCode::_do_export(Print &print, FILE *file)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     PROFILE_FUNC();
 
@@ -964,19 +950,24 @@ void GCode::_do_export(Print &print, FILE *file)
     // Write information on the generator.
     _write_format(file, "; %s\n\n", Slic3r::header_slic3r_generated().c_str());
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     // Write thumbnail
     if ((thumbnail_data != nullptr) && thumbnail_data->is_valid())
     {
         _write(file, "\n;\n; thumbnail begin\n");
 
-        // TODO -> export content of thumbnail_data.pixels
+        size_t row_size = 4 * thumbnail_data->width;
+        for (int r = (int)thumbnail_data->height - 1; r >= 0 ; --r)
+        {
+            _write(file, "; ");
+            const void* data_ptr = thumbnail_data->pixels.data() + r * row_size;
+            ::fwrite((const void*)data_ptr, 1, row_size, file);
+            _write(file, "\n");
+        }
 
         _write(file, "; thumbnail end\n;\n\n");
     }
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     // Write notes (content of the Print Settings tab -> Notes)
     {
diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp
index 4c5b92bf1..8116d06fc 100644
--- a/src/libslic3r/GCode.hpp
+++ b/src/libslic3r/GCode.hpp
@@ -30,11 +30,9 @@ namespace Slic3r {
 // Forward declarations.
 class GCode;
 class GCodePreviewData;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 struct ThumbnailData;
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 class AvoidCrossingPerimeters {
 public:
@@ -167,15 +165,11 @@ public:
 
     // throws std::runtime_exception on error,
     // throws CanceledException through print->throw_if_canceled().
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     void            do_export(Print* print, const char* path, GCodePreviewData* preview_data = nullptr, const ThumbnailData* thumbnail_data = nullptr);
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     void            do_export(Print *print, const char *path, GCodePreviewData *preview_data = nullptr);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     // Exported for the helper classes (OozePrevention, Wipe) and for the Perl binding for unit tests.
     const Vec2d&    origin() const { return m_origin; }
@@ -203,15 +197,11 @@ public:
     static void append_full_config(const Print& print, std::string& str);
 
 protected:
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     void            _do_export(Print& print, FILE* file, const ThumbnailData* thumbnail_data);
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     void            _do_export(Print &print, FILE *file);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif //ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     // Object and support extrusions of the same PrintObject at the same print_z.
     struct LayerToPrint
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 71249bd90..22edfcab2 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -87,6 +87,13 @@ using Slic3r::_3DScene;
 using Slic3r::Preset;
 using Slic3r::PrintHostJob;
 
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+#if ENABLE_THUMBNAIL_GENERATOR
+static const std::pair<unsigned int, unsigned int> THUMBNAIL_SIZE_FFF = { 128, 128 };
+static const std::pair<unsigned int, unsigned int> THUMBNAIL_SIZE_SLA = { 256, 256 };
+static const std::pair<unsigned int, unsigned int> THUMBNAIL_SIZE_3MF = { 256, 256 };
+#endif // ENABLE_THUMBNAIL_GENERATOR
+//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 namespace Slic3r {
 namespace GUI {
@@ -3052,9 +3059,11 @@ bool Plater::priv::restart_background_process(unsigned int state)
 #if ENABLE_THUMBNAIL_GENERATOR
         if ((state & UPDATE_BACKGROUND_PROCESS_FORCE_EXPORT) == 0)
         {
-            // force update of thumbnail data, so that they can be inserted into the exported gcode
-            thumbnail_generator.generate(view3D->get_canvas3d()->get_volumes().volumes, 256, 256, true);
-            thumbnail_generator.save_to_png_file("C:/prusa/test/test.png");
+            // update thumbnail data
+            if (this->printer_technology == ptFFF)
+                generate_thumbnail(THUMBNAIL_SIZE_FFF.first, THUMBNAIL_SIZE_FFF.second, true);
+            else if (this->printer_technology == ptSLA)
+                generate_thumbnail(THUMBNAIL_SIZE_SLA.first, THUMBNAIL_SIZE_SLA.second, true);
         }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ -3397,7 +3406,11 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
         this->preview->reload_print();
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-        thumbnail_generator.generate(view3D->get_canvas3d()->get_volumes().volumes, 256, 256, true);
+        // update thumbnail data
+        if (this->printer_technology == ptFFF)
+            generate_thumbnail(THUMBNAIL_SIZE_FFF.first, THUMBNAIL_SIZE_FFF.second, true);
+        else if (this->printer_technology == ptSLA)
+            generate_thumbnail(THUMBNAIL_SIZE_SLA.first, THUMBNAIL_SIZE_SLA.second, true);
 #endif // ENABLE_THUMBNAIL_GENERATOR
 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
@@ -4672,16 +4685,12 @@ void Plater::export_3mf(const boost::filesystem::path& output_path)
     DynamicPrintConfig cfg = wxGetApp().preset_bundle->full_config_secure();
     const std::string path_u8 = into_u8(path);
     wxBusyCursor wait;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-    p->generate_thumbnail(128, 128, false);
+    p->generate_thumbnail(THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, false);
     if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr, &p->thumbnail_generator.get_data())) {
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr)) {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         // Success
         p->statusbar()->set_status_text(wxString::Format(_(L("3MF file exported to %s")), path));
         p->set_project_filename(path);

From 6d5572ae4739cb2e21744e736c247c5990311fad Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 24 Oct 2019 10:25:40 +0200
Subject: [PATCH 28/84] ENABLE_THUMBNAIL_GENERATOR -> Code cleanup

---
 src/libslic3r/Print.cpp                     |  8 --------
 src/libslic3r/Print.hpp                     |  6 ------
 src/libslic3r/Technologies.hpp              |  2 --
 src/slic3r/GUI/BackgroundSlicingProcess.cpp | 13 ++-----------
 src/slic3r/GUI/BackgroundSlicingProcess.hpp |  6 ------
 src/slic3r/GUI/GLCanvas3D.hpp               |  3 ---
 src/slic3r/GUI/Plater.cpp                   | 18 ------------------
 src/slic3r/GUI/Plater.hpp                   |  2 --
 src/slic3r/GUI/ThumbnailGenerator.hpp       |  4 +++-
 9 files changed, 5 insertions(+), 57 deletions(-)

diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp
index 742a2a960..b2ed87ca0 100644
--- a/src/libslic3r/Print.cpp
+++ b/src/libslic3r/Print.cpp
@@ -1536,15 +1536,11 @@ void Print::process()
 // The export_gcode may die for various reasons (fails to process output_filename_format,
 // write error into the G-code, cannot execute post-processing scripts).
 // It is up to the caller to show an error message.
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 std::string Print::export_gcode(const std::string& path_template, GCodePreviewData* preview_data, const ThumbnailData* thumbnail_data)
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 std::string Print::export_gcode(const std::string &path_template, GCodePreviewData *preview_data)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 {
     // output everything to a G-code file
     // The following call may die if the output_filename_format template substitution fails.
@@ -1561,15 +1557,11 @@ std::string Print::export_gcode(const std::string &path_template, GCodePreviewDa
 
     // The following line may die for multiple reasons.
     GCode gcode;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     gcode.do_export(this, path.c_str(), preview_data, thumbnail_data);
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     gcode.do_export(this, path.c_str(), preview_data);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     return path.c_str();
 }
 
diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp
index 8dc54ee1d..aedeeff18 100644
--- a/src/libslic3r/Print.hpp
+++ b/src/libslic3r/Print.hpp
@@ -19,11 +19,9 @@ class PrintObject;
 class ModelObject;
 class GCode;
 class GCodePreviewData;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 struct ThumbnailData;
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 // Print step IDs for keeping track of the print state.
 enum PrintStep {
@@ -310,15 +308,11 @@ public:
     void                process() override;
     // Exports G-code into a file name based on the path_template, returns the file path of the generated G-code file.
     // If preview_data is not null, the preview_data is filled in for the G-code visualization (not used by the command line Slic3r).
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     std::string         export_gcode(const std::string& path_template, GCodePreviewData* preview_data, const ThumbnailData* thumbnail_data = nullptr);
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     std::string         export_gcode(const std::string &path_template, GCodePreviewData *preview_data);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     // methods for handling state
     bool                is_step_done(PrintStep step) const { return Inherited::is_step_done(step); }
diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 40e989bb2..4b351adb2 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -32,7 +32,6 @@
 #define ENABLE_NONCUSTOM_DATA_VIEW_RENDERING (0 && ENABLE_1_42_0_ALPHA1)
 
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 //====================
 // 2.2.0.alpha1 techs
 //====================
@@ -40,6 +39,5 @@
 
 // Enable thumbnail generator
 #define ENABLE_THUMBNAIL_GENERATOR (1 && ENABLE_2_2_0_ALPHA1)
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 #endif // _technologies_h_
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index 67860138a..cedeab910 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -10,11 +10,9 @@
 #include <wx/wfstream.h>
 #include <wx/zipstrm.h>
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 #include <miniz.h>
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 // Print now includes tbb, and tbb includes Windows. This breaks compilation of wxWidgets if included before wx.
 #include "libslic3r/Print.hpp"
@@ -22,11 +20,9 @@
 #include "libslic3r/Utils.hpp"
 #include "libslic3r/GCode/PostProcessor.hpp"
 #include "libslic3r/GCode/PreviewData.hpp"
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 #include "libslic3r/GCode/ThumbnailData.hpp"
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #include "libslic3r/libslic3r.h"
 
 #include <cassert>
@@ -93,15 +89,11 @@ void BackgroundSlicingProcess::process_fff()
 	assert(m_print == m_fff_print);
     m_print->process();
 	wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_slicing_completed_id));
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     m_fff_print->export_gcode(m_temp_output_path, m_gcode_preview_data, m_thumbnail_data);
 #else
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     m_fff_print->export_gcode(m_temp_output_path, m_gcode_preview_data);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     if (this->set_step_started(bspsGCodeFinalize)) {
 	    if (! m_export_path.empty()) {
 	    	//FIXME localize the messages
@@ -465,11 +457,10 @@ void BackgroundSlicingProcess::prepare_upload()
 
         Zipper zipper{source_path.string()};
         m_sla_print->export_raster(zipper, m_upload_job.upload_data.upload_path.string());
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
-        if (m_thumbnail_data) write_thumbnail(zipper, *m_thumbnail_data);
+        if ((m_thumbnail_data != nullptr) && m_thumbnail_data->is_valid())
+            write_thumbnail(zipper, *m_thumbnail_data);
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         zipper.finalize();
     }
 
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
index af20554df..e51a4e961 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
@@ -17,11 +17,9 @@ namespace Slic3r {
 
 class DynamicPrintConfig;
 class GCodePreviewData;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 struct ThumbnailData;
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 class Model;
 class SLAPrint;
 
@@ -54,11 +52,9 @@ public:
 	void set_fff_print(Print *print) { m_fff_print = print; }
 	void set_sla_print(SLAPrint *print) { m_sla_print = print; }
 	void set_gcode_preview_data(GCodePreviewData *gpd) { m_gcode_preview_data = gpd; }
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     void set_thumbnail_data(const ThumbnailData* data) { m_thumbnail_data = data; }
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 	// The following wxCommandEvent will be sent to the UI thread / Platter window, when the slicing is finished
 	// and the background processing will transition into G-code export.
@@ -162,12 +158,10 @@ private:
 	SLAPrint 				   *m_sla_print			 = nullptr;
 	// Data structure, to which the G-code export writes its annotations.
 	GCodePreviewData 		   *m_gcode_preview_data = nullptr;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     // Data structure, used to write thumbnail into gcode.
     const ThumbnailData        *m_thumbnail_data = nullptr;
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 	// Temporary G-code, there is one defined for the BackgroundSlicingProcess, differentiated from the other processes by a process ID.
 	std::string 				m_temp_output_path;
 	// Output path provided by the user. The output path may be set even if the slicing is running,
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 2e7fc2d77..eb3c60bd1 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -446,12 +446,9 @@ public:
     wxGLCanvas* get_wxglcanvas() { return m_canvas; }
 	const wxGLCanvas* get_wxglcanvas() const { return m_canvas; }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     const GLVolumeCollection& get_volumes() const { return m_volumes; }
-//    GLVolumeCollection& get_volumes() { return m_volumes; }
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     bool init();
     void post_event(wxEvent &&event);
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 22edfcab2..f9167cec9 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -62,11 +62,9 @@
 #include "GUI_Preview.hpp"
 #include "3DBed.hpp"
 #include "Camera.hpp"
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 #include "ThumbnailGenerator.hpp"
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #include "Tab.hpp"
 #include "PresetBundle.hpp"
 #include "BackgroundSlicingProcess.hpp"
@@ -87,13 +85,11 @@ using Slic3r::_3DScene;
 using Slic3r::Preset;
 using Slic3r::PrintHostJob;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 static const std::pair<unsigned int, unsigned int> THUMBNAIL_SIZE_FFF = { 128, 128 };
 static const std::pair<unsigned int, unsigned int> THUMBNAIL_SIZE_SLA = { 256, 256 };
 static const std::pair<unsigned int, unsigned int> THUMBNAIL_SIZE_3MF = { 256, 256 };
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 namespace Slic3r {
 namespace GUI {
@@ -1385,11 +1381,9 @@ struct Plater::priv
     View3D* view3D;
     GLToolbar view_toolbar;
     Preview *preview;
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     ThumbnailGenerator thumbnail_generator;
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     BackgroundSlicingProcess    background_process;
     bool suppressed_backround_processing_update { false };
@@ -1933,11 +1927,9 @@ struct Plater::priv
     bool can_mirror() const;
     bool can_reload_from_disk() const;
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     void generate_thumbnail(unsigned int w, unsigned int h, bool printable_only);
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     void msw_rescale_object_menu();
 
@@ -2006,11 +1998,9 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
     background_process.set_fff_print(&fff_print);
     background_process.set_sla_print(&sla_print);
     background_process.set_gcode_preview_data(&gcode_preview_data);
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     background_process.set_thumbnail_data(&thumbnail_generator.get_data());
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     background_process.set_slicing_completed_event(EVT_SLICING_COMPLETED);
     background_process.set_finished_event(EVT_PROCESS_COMPLETED);
     // Default printer technology for default config.
@@ -3055,7 +3045,6 @@ bool Plater::priv::restart_background_process(unsigned int state)
          ( ((state & UPDATE_BACKGROUND_PROCESS_FORCE_RESTART) != 0 && ! this->background_process.finished()) ||
            (state & UPDATE_BACKGROUND_PROCESS_FORCE_EXPORT) != 0 ||
            (state & UPDATE_BACKGROUND_PROCESS_RESTART) != 0 ) ) {
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
         if ((state & UPDATE_BACKGROUND_PROCESS_FORCE_EXPORT) == 0)
         {
@@ -3066,7 +3055,6 @@ bool Plater::priv::restart_background_process(unsigned int state)
                 generate_thumbnail(THUMBNAIL_SIZE_SLA.first, THUMBNAIL_SIZE_SLA.second, true);
         }
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
         // The print is valid and it can be started.
         if (this->background_process.start()) {
             this->statusbar()->set_cancel_callback([this]() {
@@ -3404,7 +3392,6 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
     } else if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SLA_PREVIEW) {
         // Update the SLA preview. Only called if not RELOAD_SLA_SUPPORT_POINTS, as the block above will refresh the preview anyways.
         this->preview->reload_print();
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
         // update thumbnail data
         if (this->printer_technology == ptFFF)
@@ -3412,7 +3399,6 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
         else if (this->printer_technology == ptSLA)
             generate_thumbnail(THUMBNAIL_SIZE_SLA.first, THUMBNAIL_SIZE_SLA.second, true);
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     }
 }
 
@@ -3638,14 +3624,12 @@ bool Plater::priv::init_object_menu()
     return true;
 }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 void Plater::priv::generate_thumbnail(unsigned int w, unsigned int h, bool printable_only)
 {
     thumbnail_generator.generate(view3D->get_canvas3d()->get_volumes().volumes, w, h, printable_only);
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 void Plater::priv::msw_rescale_object_menu()
 {
@@ -5187,14 +5171,12 @@ void Plater::paste_from_clipboard()
     p->view3D->get_canvas3d()->get_selection().paste_from_clipboard();
 }
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
 void Plater::generate_thumbnail(unsigned int w, unsigned int h, bool printable_only)
 {
     p->generate_thumbnail(w, h, printable_only);
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
 void Plater::msw_rescale()
 {
diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp
index b14cff65a..7c671f669 100644
--- a/src/slic3r/GUI/Plater.hpp
+++ b/src/slic3r/GUI/Plater.hpp
@@ -240,11 +240,9 @@ public:
     void copy_selection_to_clipboard();
     void paste_from_clipboard();
 
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 #if ENABLE_THUMBNAIL_GENERATOR
     void generate_thumbnail(unsigned int w, unsigned int h, bool printable_only);
 #endif // ENABLE_THUMBNAIL_GENERATOR
-//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 
     bool can_delete() const;
     bool can_delete_all() const;
diff --git a/src/slic3r/GUI/ThumbnailGenerator.hpp b/src/slic3r/GUI/ThumbnailGenerator.hpp
index e632106cd..ae7509b3c 100644
--- a/src/slic3r/GUI/ThumbnailGenerator.hpp
+++ b/src/slic3r/GUI/ThumbnailGenerator.hpp
@@ -6,9 +6,11 @@
 #include "../libslic3r/GCode/ThumbnailData.hpp"
 
 namespace Slic3r {
+
     class GLVolume;
     typedef std::vector<GLVolume*> GLVolumePtrs;
-    namespace GUI {
+
+namespace GUI {
 
     class ThumbnailGenerator
     {

From a1f2ecb285daebbac4271a6b145ead6433affcd7 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 24 Oct 2019 10:38:30 +0200
Subject: [PATCH 29/84] ENABLE_THUMBNAIL_GENERATOR -> Fixed color of non
 printable volumes into thumbnail

---
 src/slic3r/GUI/ThumbnailGenerator.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/ThumbnailGenerator.cpp b/src/slic3r/GUI/ThumbnailGenerator.cpp
index 37794dddf..f2a74cae9 100644
--- a/src/slic3r/GUI/ThumbnailGenerator.cpp
+++ b/src/slic3r/GUI/ThumbnailGenerator.cpp
@@ -89,7 +89,7 @@ void ThumbnailGenerator::render_and_store(const GLVolumePtrs& volumes, bool prin
 
     for (const GLVolume* vol : visible_volumes)
     {
-        glsafe(::glColor3fv(vol->printable ? orange : gray));
+        glsafe(::glColor3fv((vol->printable && !vol->is_outside) ? orange : gray));
         vol->render();
     }
 

From a417da8fea69547009ddb5994c44ade60c5fa9ac Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 24 Oct 2019 11:08:39 +0200
Subject: [PATCH 30/84] ENABLE_THUMBNAIL_GENERATOR -> Fixed volumes visibility
 test to render them into thumbnail

---
 src/slic3r/GUI/ThumbnailGenerator.cpp | 34 ++++++---------------------
 src/slic3r/GUI/ThumbnailGenerator.hpp |  2 --
 2 files changed, 7 insertions(+), 29 deletions(-)

diff --git a/src/slic3r/GUI/ThumbnailGenerator.cpp b/src/slic3r/GUI/ThumbnailGenerator.cpp
index f2a74cae9..634f9e61c 100644
--- a/src/slic3r/GUI/ThumbnailGenerator.cpp
+++ b/src/slic3r/GUI/ThumbnailGenerator.cpp
@@ -29,34 +29,14 @@ void ThumbnailGenerator::generate(const GLVolumePtrs& volumes, unsigned int w, u
     render_and_store(volumes, printable_only);
 }
 
-bool ThumbnailGenerator::save_to_png_file(const std::string& filename)
-{
-    if (!m_data.is_valid())
-        return false;
-
-    wxImage image(m_data.width, m_data.height);
-    image.InitAlpha();
-
-    for (unsigned int r = 0; r < m_data.height; ++r)
-    {
-        unsigned int rr = (m_data.height - 1 - r) * m_data.width;
-        for (unsigned int c = 0; c < m_data.width; ++c)
-        {
-            unsigned char* px = m_data.pixels.data() + 4 * (rr + c);
-            image.SetRGB((int)c, (int)r, px[0], px[1], px[2]);
-            image.SetAlpha((int)c, (int)r, px[3]);
-        }
-    }
-
-    std::string path = filename;
-    if (!boost::iends_with(path, ".png"))
-        path = boost::filesystem::path(path).replace_extension(".png").string();
-
-    return image.SaveFile(from_u8(path), wxBITMAP_TYPE_PNG);
-}
-
 void ThumbnailGenerator::render_and_store(const GLVolumePtrs& volumes, bool printable_only)
 {
+    auto is_visible = [] (const GLVolume& v) -> bool {
+        bool ret = v.printable;
+        ret &= (!v.shader_outside_printer_detection_enabled || !v.is_outside);
+        return ret;
+    };
+
     static const float orange[] = { 0.99f, 0.49f, 0.26f };
     static const float gray[] = { 0.64f, 0.64f, 0.64f };
 
@@ -64,7 +44,7 @@ void ThumbnailGenerator::render_and_store(const GLVolumePtrs& volumes, bool prin
 
     for (const GLVolume* vol : volumes)
     {
-        if (!printable_only || vol->printable)
+        if (!printable_only || is_visible(*vol))
             visible_volumes.push_back(vol);
     }
 
diff --git a/src/slic3r/GUI/ThumbnailGenerator.hpp b/src/slic3r/GUI/ThumbnailGenerator.hpp
index ae7509b3c..20087b79b 100644
--- a/src/slic3r/GUI/ThumbnailGenerator.hpp
+++ b/src/slic3r/GUI/ThumbnailGenerator.hpp
@@ -27,8 +27,6 @@ namespace GUI {
 
         const ThumbnailData& get_data() const { return m_data; }
 
-        bool save_to_png_file(const std::string& filename);
-
     private:
         void render_and_store(const GLVolumePtrs& volumes, bool printable_only);
     };

From 29fd0ef7c6d2fdc1dcca6d599ba128d48615e232 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 24 Oct 2019 12:09:09 +0200
Subject: [PATCH 31/84] ENABLE_THUMBNAIL_GENERATOR -> Refactoring to simplify
 code

---
 src/slic3r/CMakeLists.txt     |  2 --
 src/slic3r/GUI/GLCanvas3D.cpp | 61 +++++++++++++++++++++++++++++++++++
 src/slic3r/GUI/GLCanvas3D.hpp | 10 +++---
 src/slic3r/GUI/Plater.cpp     | 25 ++++++--------
 src/slic3r/GUI/Plater.hpp     |  4 ---
 5 files changed, 76 insertions(+), 26 deletions(-)

diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index 0b2dd6702..17b76e629 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -136,8 +136,6 @@ set(SLIC3R_GUI_SOURCES
     GUI/ProgressStatusBar.cpp
     GUI/PrintHostDialogs.cpp
     GUI/PrintHostDialogs.hpp
-    GUI/ThumbnailGenerator.cpp
-    GUI/ThumbnailGenerator.hpp
     Utils/Http.cpp
     Utils/Http.hpp
     Utils/FixModelByWin10.cpp
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index c55d64b47..8d16187cb 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -7,6 +7,9 @@
 #include "libslic3r/ClipperUtils.hpp"
 #include "libslic3r/PrintConfig.hpp"
 #include "libslic3r/GCode/PreviewData.hpp"
+#if ENABLE_THUMBNAIL_GENERATOR
+#include "libslic3r/GCode/ThumbnailData.hpp"
+#endif // ENABLE_THUMBNAIL_GENERATOR
 #include "libslic3r/Geometry.hpp"
 #include "libslic3r/ExtrusionEntity.hpp"
 #include "libslic3r/Utils.hpp"
@@ -1643,6 +1646,64 @@ void GLCanvas3D::render()
 #endif // ENABLE_RENDER_STATISTICS
 }
 
+#if ENABLE_THUMBNAIL_GENERATOR
+void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only)
+{
+    auto is_visible = [](const GLVolume& v) -> bool {
+        bool ret = v.printable;
+        ret &= (!v.shader_outside_printer_detection_enabled || !v.is_outside);
+        return ret;
+    };
+
+    static const float orange[] = { 0.99f, 0.49f, 0.26f };
+    static const float gray[] = { 0.64f, 0.64f, 0.64f };
+
+    thumbnail_data.set(w, h);
+
+    GLVolumePtrs visible_volumes;
+
+    for (GLVolume* vol : m_volumes.volumes)
+    {
+        if (!printable_only || is_visible(*vol))
+            visible_volumes.push_back(vol);
+    }
+
+    if (visible_volumes.empty())
+        return;
+
+    BoundingBoxf3 box;
+    for (const GLVolume* vol : visible_volumes)
+    {
+        box.merge(vol->transformed_bounding_box());
+    }
+
+    Camera camera;
+    camera.zoom_to_box(box, thumbnail_data.width, thumbnail_data.height);
+    camera.apply_viewport(0, 0, thumbnail_data.width, thumbnail_data.height);
+    camera.apply_view_matrix();
+    camera.apply_projection(box);
+
+    glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
+    glsafe(::glEnable(GL_LIGHTING));
+    glsafe(::glEnable(GL_DEPTH_TEST));
+
+    for (const GLVolume* vol : visible_volumes)
+    {
+        glsafe(::glColor3fv((vol->printable && !vol->is_outside) ? orange : gray));
+        vol->render();
+    }
+
+    glsafe(::glDisable(GL_DEPTH_TEST));
+    glsafe(::glDisable(GL_LIGHTING));
+    glsafe(::glReadPixels(0, 0, thumbnail_data.width, thumbnail_data.height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
+
+    std::cout << "Generated thumbnail " << thumbnail_data.width << "x" << thumbnail_data.height << std::endl;
+
+    // force a frame render to restore the default framebuffer
+    render();
+}
+#endif // ENABLE_THUMBNAIL_GENERATOR
+
 void GLCanvas3D::select_all()
 {
     m_selection.add_all();
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index eb3c60bd1..611e9a932 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -36,6 +36,9 @@ class GLShader;
 class ExPolygon;
 class BackgroundSlicingProcess;
 class GCodePreviewData;
+#if ENABLE_THUMBNAIL_GENERATOR
+struct ThumbnailData;
+#endif // ENABLE_THUMBNAIL_GENERATOR
 struct SlicingParameters;
 enum LayerHeightEditActionType : unsigned int;
 
@@ -446,10 +449,6 @@ public:
     wxGLCanvas* get_wxglcanvas() { return m_canvas; }
 	const wxGLCanvas* get_wxglcanvas() const { return m_canvas; }
 
-#if ENABLE_THUMBNAIL_GENERATOR
-    const GLVolumeCollection& get_volumes() const { return m_volumes; }
-#endif // ENABLE_THUMBNAIL_GENERATOR
-
     bool init();
     void post_event(wxEvent &&event);
 
@@ -523,6 +522,9 @@ public:
     bool is_dragging() const { return m_gizmos.is_dragging() || m_moving; }
 
     void render();
+#if ENABLE_THUMBNAIL_GENERATOR
+    void render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only);
+#endif // ENABLE_THUMBNAIL_GENERATOR
 
     void select_all();
     void deselect_all();
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index f9167cec9..0ebd208fa 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -32,6 +32,9 @@
 #include "libslic3r/Format/AMF.hpp"
 #include "libslic3r/Format/3mf.hpp"
 #include "libslic3r/GCode/PreviewData.hpp"
+#if ENABLE_THUMBNAIL_GENERATOR
+#include "libslic3r/GCode/ThumbnailData.hpp"
+#endif // ENABLE_THUMBNAIL_GENERATOR
 #include "libslic3r/Model.hpp"
 #include "libslic3r/Polygon.hpp"
 #include "libslic3r/Print.hpp"
@@ -62,9 +65,6 @@
 #include "GUI_Preview.hpp"
 #include "3DBed.hpp"
 #include "Camera.hpp"
-#if ENABLE_THUMBNAIL_GENERATOR
-#include "ThumbnailGenerator.hpp"
-#endif // ENABLE_THUMBNAIL_GENERATOR
 #include "Tab.hpp"
 #include "PresetBundle.hpp"
 #include "BackgroundSlicingProcess.hpp"
@@ -1370,6 +1370,9 @@ struct Plater::priv
     Slic3r::Model               model;
     PrinterTechnology           printer_technology = ptFFF;
     Slic3r::GCodePreviewData    gcode_preview_data;
+#if ENABLE_THUMBNAIL_GENERATOR
+    Slic3r::ThumbnailData       thumbnail_data;
+#endif // ENABLE_THUMBNAIL_GENERATOR
 
     // GUI elements
     wxSizer* panel_sizer{ nullptr };
@@ -1381,9 +1384,6 @@ struct Plater::priv
     View3D* view3D;
     GLToolbar view_toolbar;
     Preview *preview;
-#if ENABLE_THUMBNAIL_GENERATOR
-    ThumbnailGenerator thumbnail_generator;
-#endif // ENABLE_THUMBNAIL_GENERATOR
 
     BackgroundSlicingProcess    background_process;
     bool suppressed_backround_processing_update { false };
@@ -1999,7 +1999,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
     background_process.set_sla_print(&sla_print);
     background_process.set_gcode_preview_data(&gcode_preview_data);
 #if ENABLE_THUMBNAIL_GENERATOR
-    background_process.set_thumbnail_data(&thumbnail_generator.get_data());
+    background_process.set_thumbnail_data(&thumbnail_data);
 #endif // ENABLE_THUMBNAIL_GENERATOR
     background_process.set_slicing_completed_event(EVT_SLICING_COMPLETED);
     background_process.set_finished_event(EVT_PROCESS_COMPLETED);
@@ -3627,7 +3627,7 @@ bool Plater::priv::init_object_menu()
 #if ENABLE_THUMBNAIL_GENERATOR
 void Plater::priv::generate_thumbnail(unsigned int w, unsigned int h, bool printable_only)
 {
-    thumbnail_generator.generate(view3D->get_canvas3d()->get_volumes().volumes, w, h, printable_only);
+    view3D->get_canvas3d()->render_thumbnail(thumbnail_data, w, h, printable_only);
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
@@ -4671,7 +4671,7 @@ void Plater::export_3mf(const boost::filesystem::path& output_path)
     wxBusyCursor wait;
 #if ENABLE_THUMBNAIL_GENERATOR
     p->generate_thumbnail(THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, false);
-    if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr, &p->thumbnail_generator.get_data())) {
+    if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr, &p->thumbnail_data)) {
 #else
     if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr)) {
 #endif // ENABLE_THUMBNAIL_GENERATOR
@@ -5171,13 +5171,6 @@ void Plater::paste_from_clipboard()
     p->view3D->get_canvas3d()->get_selection().paste_from_clipboard();
 }
 
-#if ENABLE_THUMBNAIL_GENERATOR
-void Plater::generate_thumbnail(unsigned int w, unsigned int h, bool printable_only)
-{
-    p->generate_thumbnail(w, h, printable_only);
-}
-#endif // ENABLE_THUMBNAIL_GENERATOR
-
 void Plater::msw_rescale()
 {
     p->preview->msw_rescale();
diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp
index 7c671f669..00ceb89bc 100644
--- a/src/slic3r/GUI/Plater.hpp
+++ b/src/slic3r/GUI/Plater.hpp
@@ -240,10 +240,6 @@ public:
     void copy_selection_to_clipboard();
     void paste_from_clipboard();
 
-#if ENABLE_THUMBNAIL_GENERATOR
-    void generate_thumbnail(unsigned int w, unsigned int h, bool printable_only);
-#endif // ENABLE_THUMBNAIL_GENERATOR
-
     bool can_delete() const;
     bool can_delete_all() const;
     bool can_increase_instances() const;

From d01532f4c682abd16a37cd0bff1f330911114d2b Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 24 Oct 2019 12:11:24 +0200
Subject: [PATCH 32/84] ENABLE_THUMBNAIL_GENERATOR -> Removed obsolete files

---
 src/slic3r/GUI/ThumbnailGenerator.cpp | 84 ---------------------------
 src/slic3r/GUI/ThumbnailGenerator.hpp | 40 -------------
 2 files changed, 124 deletions(-)
 delete mode 100644 src/slic3r/GUI/ThumbnailGenerator.cpp
 delete mode 100644 src/slic3r/GUI/ThumbnailGenerator.hpp

diff --git a/src/slic3r/GUI/ThumbnailGenerator.cpp b/src/slic3r/GUI/ThumbnailGenerator.cpp
deleted file mode 100644
index 634f9e61c..000000000
--- a/src/slic3r/GUI/ThumbnailGenerator.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-#include "libslic3r/libslic3r.h"
-#include "ThumbnailGenerator.hpp"
-
-#if ENABLE_THUMBNAIL_GENERATOR
-
-#include "Camera.hpp"
-#include "3DScene.hpp"
-#include "GUI.hpp"
-
-#include <boost/filesystem.hpp>
-#include <boost/algorithm/string/predicate.hpp>
-#include <GL/glew.h>
-
-#include <wx/image.h>
-
-namespace Slic3r {
-namespace GUI {
-
-void ThumbnailGenerator::reset()
-{
-    m_data.reset();
-}
-
-void ThumbnailGenerator::generate(const GLVolumePtrs& volumes, unsigned int w, unsigned int h, bool printable_only)
-{
-    std::cout << "Generated thumbnail " << w << "x" << h << std::endl;
-
-    m_data.set(w, h);
-    render_and_store(volumes, printable_only);
-}
-
-void ThumbnailGenerator::render_and_store(const GLVolumePtrs& volumes, bool printable_only)
-{
-    auto is_visible = [] (const GLVolume& v) -> bool {
-        bool ret = v.printable;
-        ret &= (!v.shader_outside_printer_detection_enabled || !v.is_outside);
-        return ret;
-    };
-
-    static const float orange[] = { 0.99f, 0.49f, 0.26f };
-    static const float gray[] = { 0.64f, 0.64f, 0.64f };
-
-    GLVolumeConstPtrs visible_volumes;
-
-    for (const GLVolume* vol : volumes)
-    {
-        if (!printable_only || is_visible(*vol))
-            visible_volumes.push_back(vol);
-    }
-
-    if (visible_volumes.empty())
-        return;
-
-    BoundingBoxf3 box;
-    for (const GLVolume* vol : visible_volumes)
-    {
-        box.merge(vol->transformed_bounding_box());
-    }
-
-    Camera camera;
-    camera.zoom_to_box(box, m_data.width, m_data.height);
-    camera.apply_viewport(0, 0, m_data.width, m_data.height);
-    camera.apply_view_matrix();
-    camera.apply_projection(box);
-
-    glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
-    glsafe(::glEnable(GL_LIGHTING));
-    glsafe(::glEnable(GL_DEPTH_TEST));
-
-    for (const GLVolume* vol : visible_volumes)
-    {
-        glsafe(::glColor3fv((vol->printable && !vol->is_outside) ? orange : gray));
-        vol->render();
-    }
-
-    glsafe(::glDisable(GL_DEPTH_TEST));
-    glsafe(::glDisable(GL_LIGHTING));
-    glsafe(::glReadPixels(0, 0, m_data.width, m_data.height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)m_data.pixels.data()));
-}
-
-} // namespace GUI
-} // namespace Slic3r
-
-#endif // ENABLE_THUMBNAIL_GENERATOR
diff --git a/src/slic3r/GUI/ThumbnailGenerator.hpp b/src/slic3r/GUI/ThumbnailGenerator.hpp
deleted file mode 100644
index 20087b79b..000000000
--- a/src/slic3r/GUI/ThumbnailGenerator.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef slic3r_GUI_ThumbnailGenerator_hpp_
-#define slic3r_GUI_ThumbnailGenerator_hpp_
-
-#if ENABLE_THUMBNAIL_GENERATOR
-
-#include "../libslic3r/GCode/ThumbnailData.hpp"
-
-namespace Slic3r {
-
-    class GLVolume;
-    typedef std::vector<GLVolume*> GLVolumePtrs;
-
-namespace GUI {
-
-    class ThumbnailGenerator
-    {
-        typedef std::vector<const GLVolume*> GLVolumeConstPtrs;
-
-        ThumbnailData m_data;
-
-    public:
-        ThumbnailGenerator() { reset(); }
-
-        void reset();
-
-        void generate(const GLVolumePtrs& volumes, unsigned int w, unsigned int h, bool printable_only);
-
-        const ThumbnailData& get_data() const { return m_data; }
-
-    private:
-        void render_and_store(const GLVolumePtrs& volumes, bool printable_only);
-    };
-
-} // namespace GUI
-} // namespace Slic3r
-
-#endif // ENABLE_THUMBNAIL_GENERATOR
-
-#endif // slic3r_GUI_ThumbnailGenerator_hpp_
-

From 1baa3336633bd4b596179310c4e0306e94155e36 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 24 Oct 2019 12:30:19 +0200
Subject: [PATCH 33/84] ENABLE_THUMBNAIL_GENERATOR -> Fixed flickering of 3D
 view when generating thumbnail

---
 src/slic3r/GUI/GLCanvas3D.cpp | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 8d16187cb..a99b210ac 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1697,10 +1697,9 @@ void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w,
     glsafe(::glDisable(GL_LIGHTING));
     glsafe(::glReadPixels(0, 0, thumbnail_data.width, thumbnail_data.height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
 
-    std::cout << "Generated thumbnail " << thumbnail_data.width << "x" << thumbnail_data.height << std::endl;
-
-    // force a frame render to restore the default framebuffer
-    render();
+    // restore the framebuffer size to avoid flickering on the 3D scene
+    const Size& cnv_size = get_canvas_size();
+    m_camera.apply_viewport(0, 0, cnv_size.get_width(), cnv_size.get_height());
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 

From 296d79abf7458719d51569fe785e519c32d57fec Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 24 Oct 2019 15:56:10 +0200
Subject: [PATCH 34/84] ENABLE_THUMBNAIL_GENERATOR -> Fixed thumbnail
 generation for SLA and 3mf

---
 src/libslic3r/SLAPrint.cpp    |  5 +++++
 src/slic3r/GUI/GLCanvas3D.cpp | 28 +++++++++++++++++++++++++---
 src/slic3r/GUI/GLCanvas3D.hpp |  4 +++-
 src/slic3r/GUI/Plater.cpp     | 27 ++++++++++++++++-----------
 4 files changed, 49 insertions(+), 15 deletions(-)

diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp
index 2a1ae74d7..2c080ec3d 100644
--- a/src/libslic3r/SLAPrint.cpp
+++ b/src/libslic3r/SLAPrint.cpp
@@ -1372,7 +1372,12 @@ void SLAPrint::process()
         m_print_statistics.fast_layers_count = fast_layers;
         m_print_statistics.slow_layers_count = slow_layers;
 
+#if ENABLE_THUMBNAIL_GENERATOR
+        // second argument set to -3 to differentiate it from the same call made into slice_supports()
+        m_report_status(*this, -3, "", SlicingStatus::RELOAD_SLA_PREVIEW);
+#else
         m_report_status(*this, -2, "", SlicingStatus::RELOAD_SLA_PREVIEW);
+#endif // ENABLE_THUMBNAIL_GENERATOR
     };
 
     // Rasterizing the model objects, and their supports
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index a99b210ac..914084bb6 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1647,7 +1647,7 @@ void GLCanvas3D::render()
 }
 
 #if ENABLE_THUMBNAIL_GENERATOR
-void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only)
+void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
 {
     auto is_visible = [](const GLVolume& v) -> bool {
         bool ret = v.printable;
@@ -1664,8 +1664,11 @@ void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w,
 
     for (GLVolume* vol : m_volumes.volumes)
     {
-        if (!printable_only || is_visible(*vol))
-            visible_volumes.push_back(vol);
+        if (!vol->is_modifier && (!parts_only || (vol->composite_id.volume_id >= 0)))
+        {
+            if (!printable_only || is_visible(*vol))
+                visible_volumes.push_back(vol);
+        }
     }
 
     if (visible_volumes.empty())
@@ -1697,6 +1700,25 @@ void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w,
     glsafe(::glDisable(GL_LIGHTING));
     glsafe(::glReadPixels(0, 0, thumbnail_data.width, thumbnail_data.height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
 
+#if 0
+    // debug export of generated image
+    wxImage image(thumbnail_data.width, thumbnail_data.height);
+    image.InitAlpha();
+
+    for (unsigned int r = 0; r < thumbnail_data.height; ++r)
+    {
+        unsigned int rr = (thumbnail_data.height - 1 - r) * thumbnail_data.width;
+        for (unsigned int c = 0; c < thumbnail_data.width; ++c)
+        {
+            unsigned char* px = thumbnail_data.pixels.data() + 4 * (rr + c);
+            image.SetRGB((int)c, (int)r, px[0], px[1], px[2]);
+            image.SetAlpha((int)c, (int)r, px[3]);
+        }
+    }
+
+    image.SaveFile("C:/test.png", wxBITMAP_TYPE_PNG);
+#endif 
+
     // restore the framebuffer size to avoid flickering on the 3D scene
     const Size& cnv_size = get_canvas_size();
     m_camera.apply_viewport(0, 0, cnv_size.get_width(), cnv_size.get_height());
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 611e9a932..5b06b6311 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -523,7 +523,9 @@ public:
 
     void render();
 #if ENABLE_THUMBNAIL_GENERATOR
-    void render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only);
+    // printable_only == false -> render also non printable volumes as grayed
+    // parts_only == false -> render also sla support and pad
+    void render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only);
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
     void select_all();
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 0ebd208fa..008a6eaa3 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1928,7 +1928,7 @@ struct Plater::priv
     bool can_reload_from_disk() const;
 
 #if ENABLE_THUMBNAIL_GENERATOR
-    void generate_thumbnail(unsigned int w, unsigned int h, bool printable_only);
+    void generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, bool printable_only, bool parts_only);
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
     void msw_rescale_object_menu();
@@ -3050,9 +3050,12 @@ bool Plater::priv::restart_background_process(unsigned int state)
         {
             // update thumbnail data
             if (this->printer_technology == ptFFF)
-                generate_thumbnail(THUMBNAIL_SIZE_FFF.first, THUMBNAIL_SIZE_FFF.second, true);
+                // for ptFFF we need to generate the thumbnail before the export of gcode starts
+                generate_thumbnail(this->thumbnail_data, THUMBNAIL_SIZE_FFF.first, THUMBNAIL_SIZE_FFF.second, true, true);
             else if (this->printer_technology == ptSLA)
-                generate_thumbnail(THUMBNAIL_SIZE_SLA.first, THUMBNAIL_SIZE_SLA.second, true);
+                // for ptSLA generate thumbnail without supports and pad (not yet calculated)
+                // to render also supports and pad see on_slicing_update()
+                generate_thumbnail(this->thumbnail_data, THUMBNAIL_SIZE_SLA.first, THUMBNAIL_SIZE_SLA.second, true, true);
         }
 #endif // ENABLE_THUMBNAIL_GENERATOR
         // The print is valid and it can be started.
@@ -3392,13 +3395,14 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
     } else if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SLA_PREVIEW) {
         // Update the SLA preview. Only called if not RELOAD_SLA_SUPPORT_POINTS, as the block above will refresh the preview anyways.
         this->preview->reload_print();
+/*
 #if ENABLE_THUMBNAIL_GENERATOR
         // update thumbnail data
-        if (this->printer_technology == ptFFF)
-            generate_thumbnail(THUMBNAIL_SIZE_FFF.first, THUMBNAIL_SIZE_FFF.second, true);
-        else if (this->printer_technology == ptSLA)
-            generate_thumbnail(THUMBNAIL_SIZE_SLA.first, THUMBNAIL_SIZE_SLA.second, true);
+        // for ptSLA generate the thumbnail after supports and pad have been calculated to have them rendered
+        if ((this->printer_technology == ptSLA) && (evt.status.percent == -3))
+            generate_thumbnail(this->thumbnail_data, THUMBNAIL_SIZE_SLA.first, THUMBNAIL_SIZE_SLA.second, true, false);
 #endif // ENABLE_THUMBNAIL_GENERATOR
+*/
     }
 }
 
@@ -3625,9 +3629,9 @@ bool Plater::priv::init_object_menu()
 }
 
 #if ENABLE_THUMBNAIL_GENERATOR
-void Plater::priv::generate_thumbnail(unsigned int w, unsigned int h, bool printable_only)
+void Plater::priv::generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
 {
-    view3D->get_canvas3d()->render_thumbnail(thumbnail_data, w, h, printable_only);
+    view3D->get_canvas3d()->render_thumbnail(data, w, h, printable_only, parts_only);
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
@@ -4670,8 +4674,9 @@ void Plater::export_3mf(const boost::filesystem::path& output_path)
     const std::string path_u8 = into_u8(path);
     wxBusyCursor wait;
 #if ENABLE_THUMBNAIL_GENERATOR
-    p->generate_thumbnail(THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, false);
-    if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr, &p->thumbnail_data)) {
+    ThumbnailData thumbnail_data;
+    p->generate_thumbnail(thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, false, true);
+    if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr, &thumbnail_data)) {
 #else
     if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr)) {
 #endif // ENABLE_THUMBNAIL_GENERATOR

From f7d3cf063bdae284989286ef84e07869c42b9382 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 25 Oct 2019 08:19:02 +0200
Subject: [PATCH 35/84] ENABLE_THUMBNAIL_GENERATOR -> Added a comment

---
 src/slic3r/GUI/Plater.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 008a6eaa3..60a90f1f1 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -3395,6 +3395,8 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
     } else if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SLA_PREVIEW) {
         // Update the SLA preview. Only called if not RELOAD_SLA_SUPPORT_POINTS, as the block above will refresh the preview anyways.
         this->preview->reload_print();
+
+        // uncomment the following lines if you want to render into the thumbnail also supports and pad for SLA printer
 /*
 #if ENABLE_THUMBNAIL_GENERATOR
         // update thumbnail data

From 982ed95a3560a9e7212efa7c0eaf5f764a2096ea Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 25 Oct 2019 08:57:13 +0200
Subject: [PATCH 36/84] ENABLE_THUMBNAIL_GENERATOR -> Save thumbnail size into
 gcode

---
 src/libslic3r/GCode.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 2ea8eae1d..c96468415 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -954,7 +954,7 @@ void GCode::_do_export(Print &print, FILE *file)
     // Write thumbnail
     if ((thumbnail_data != nullptr) && thumbnail_data->is_valid())
     {
-        _write(file, "\n;\n; thumbnail begin\n");
+        _write_format(file, "\n;\n; thumbnail begin %dx%d\n", thumbnail_data->width, thumbnail_data->height);
 
         size_t row_size = 4 * thumbnail_data->width;
         for (int r = (int)thumbnail_data->height - 1; r >= 0 ; --r)

From 843251c91fd802a9a27e71b9e03c2e2bb5c518c5 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 25 Oct 2019 09:04:58 +0200
Subject: [PATCH 37/84] ENABLE_THUMBNAIL_GENERATOR -> Do not render wipe tower
 into thumbnail

---
 src/slic3r/GUI/GLCanvas3D.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 914084bb6..703321c3c 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1664,7 +1664,7 @@ void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w,
 
     for (GLVolume* vol : m_volumes.volumes)
     {
-        if (!vol->is_modifier && (!parts_only || (vol->composite_id.volume_id >= 0)))
+        if (!vol->is_modifier && !vol->is_wipe_tower && (!parts_only || (vol->composite_id.volume_id >= 0)))
         {
             if (!printable_only || is_visible(*vol))
                 visible_volumes.push_back(vol);

From de60b403471bbfc510c54dae78757131e5de3ed2 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 25 Oct 2019 12:18:10 +0200
Subject: [PATCH 38/84] ENABLE_THUMBNAIL_GENERATOR -> Thumbnail data saved into
 gcode using base64 encoding + debug code to extract thumbnails from gcode

---
 src/libslic3r/GCode.cpp      | 12 ++---
 src/slic3r/GUI/GUI_App.cpp   | 86 ++++++++++++++++++++++++++++++++++++
 src/slic3r/GUI/GUI_App.hpp   |  5 +++
 src/slic3r/GUI/MainFrame.cpp |  5 +++
 4 files changed, 102 insertions(+), 6 deletions(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index c96468415..db493270a 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -21,6 +21,9 @@
 #include <boost/foreach.hpp>
 #include <boost/filesystem.hpp>
 #include <boost/log/trivial.hpp>
+#if ENABLE_THUMBNAIL_GENERATOR
+#include <boost/beast/core/detail/base64.hpp>
+#endif // ENABLE_THUMBNAIL_GENERATOR
 
 #include <boost/nowide/iostream.hpp>
 #include <boost/nowide/cstdio.hpp>
@@ -951,18 +954,15 @@ void GCode::_do_export(Print &print, FILE *file)
     _write_format(file, "; %s\n\n", Slic3r::header_slic3r_generated().c_str());
 
 #if ENABLE_THUMBNAIL_GENERATOR
-    // Write thumbnail
+    // Write thumbnail using base64 encoding
     if ((thumbnail_data != nullptr) && thumbnail_data->is_valid())
     {
         _write_format(file, "\n;\n; thumbnail begin %dx%d\n", thumbnail_data->width, thumbnail_data->height);
 
         size_t row_size = 4 * thumbnail_data->width;
-        for (int r = (int)thumbnail_data->height - 1; r >= 0 ; --r)
+        for (int r = (int)thumbnail_data->height - 1; r >= 0; --r)
         {
-            _write(file, "; ");
-            const void* data_ptr = thumbnail_data->pixels.data() + r * row_size;
-            ::fwrite((const void*)data_ptr, 1, row_size, file);
-            _write(file, "\n");
+            _write_format(file, "; %s\n", boost::beast::detail::base64_encode((const std::uint8_t*)(thumbnail_data->pixels.data() + r * row_size), row_size).c_str());
         }
 
         _write(file, "; thumbnail end\n;\n\n");
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index b5e70c0a1..0b2244d65 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -51,6 +51,10 @@
 #include <Shlobj.h>
 #endif // __WXMSW__
 
+#if ENABLE_THUMBNAIL_GENERATOR
+#include <boost/beast/core/detail/base64.hpp>
+#endif // ENABLE_THUMBNAIL_GENERATOR
+
 namespace Slic3r {
 namespace GUI {
 
@@ -1082,6 +1086,88 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage
     return res;
 }
 
+#if ENABLE_THUMBNAIL_GENERATOR
+void GUI_App::gcode_thumbnails_debug()
+{
+    const std::string BEGIN_MASK = "; thumbnail begin";
+    const std::string END_MASK = "; thumbnail end";
+    std::string gcode_line;
+    bool reading_image = false;
+    unsigned int width = 0;
+    unsigned int height = 0;
+
+    wxFileDialog dialog(GetTopWindow(), _(L("Select a gcode file:")), "", "", "G-code files (*.gcode)|*.gcode;*.GCODE;", wxFD_OPEN | wxFD_FILE_MUST_EXIST);
+    if (dialog.ShowModal() != wxID_OK)
+        return;
+
+    std::string in_filename = into_u8(dialog.GetPath());
+    std::string out_path = boost::filesystem::path(in_filename).remove_filename().append(L"thumbnail").string();
+
+    boost::nowide::ifstream file(in_filename.c_str());
+    std::vector<std::string> rows;
+    if (file.good())
+    {
+        while (std::getline(file, gcode_line))
+        {
+            if (file.good())
+            {
+                if (boost::starts_with(gcode_line, BEGIN_MASK))
+                {
+                    reading_image = true;
+                    gcode_line = gcode_line.substr(BEGIN_MASK.length() + 1);
+                    std::string::size_type x_pos = gcode_line.find('x');
+                    std::string width_str = gcode_line.substr(0, x_pos);
+                    width = (unsigned int)::atoi(width_str.c_str());
+                    std::string height_str = gcode_line.substr(x_pos + 1);
+                    height = (unsigned int)::atoi(height_str.c_str());
+                }
+                else if (reading_image && boost::starts_with(gcode_line, END_MASK))
+                {
+                    if ((unsigned int)rows.size() == height)
+                    {
+                        std::vector<unsigned char> thumbnail(4 * width * height, 0);
+                        for (unsigned int r = 0; r < (unsigned int)rows.size(); ++r)
+                        {
+                            std::string decoded_row = boost::beast::detail::base64_decode(rows[r]);
+                            if ((unsigned int)decoded_row.length() == width * 4)
+                            {
+                                void* image_ptr = (void*)(thumbnail.data() + r * width * 4);
+                                ::memcpy(image_ptr, (const void*)decoded_row.c_str(), width * 4);
+                            }
+                        }
+
+                        wxImage image(width, height);
+                        image.InitAlpha();
+
+                        for (unsigned int r = 0; r < height; ++r)
+                        {
+                            unsigned int rr = r * width;
+                            for (unsigned int c = 0; c < width; ++c)
+                            {
+                                unsigned char* px = thumbnail.data() + 4 * (rr + c);
+                                image.SetRGB((int)c, (int)r, px[0], px[1], px[2]);
+                                image.SetAlpha((int)c, (int)r, px[3]);
+                            }
+                        }
+
+                        image.SaveFile(out_path + std::to_string(width) + "x" + std::to_string(height) + ".png", wxBITMAP_TYPE_PNG);
+                    }
+
+                    reading_image = false;
+                    width = 0;
+                    height = 0;
+                    rows.clear();
+                }
+                else if (reading_image)
+                    rows.push_back(gcode_line.substr(2));
+            }
+        }
+
+        file.close();
+    }
+}
+#endif // ENABLE_THUMBNAIL_GENERATOR
+
 void GUI_App::window_pos_save(wxTopLevelWindow* window, const std::string &name)
 {
     if (name.empty()) { return; }
diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp
index c5ddc0152..f9f907e42 100644
--- a/src/slic3r/GUI/GUI_App.hpp
+++ b/src/slic3r/GUI/GUI_App.hpp
@@ -189,6 +189,11 @@ public:
     void            open_web_page_localized(const std::string &http_address);
     bool            run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage start_page = ConfigWizard::SP_WELCOME);
 
+#if ENABLE_THUMBNAIL_GENERATOR
+    // temporary and debug only -> extract thumbnails from selected gcode and save them as png files
+    void            gcode_thumbnails_debug();
+#endif // ENABLE_THUMBNAIL_GENERATOR
+
 private:
     bool            on_init_inner();
     void            window_pos_save(wxTopLevelWindow* window, const std::string &name);
diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index 6f39db86d..56eda2c0d 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -682,6 +682,11 @@ void MainFrame::init_menubar()
         helpMenu->AppendSeparator();
         append_menu_item(helpMenu, wxID_ANY, _(L("Keyboard Shortcuts")) + sep + "&?", _(L("Show the list of the keyboard shortcuts")),
             [this](wxCommandEvent&) { wxGetApp().keyboard_shortcuts(); });
+#if ENABLE_THUMBNAIL_GENERATOR
+        helpMenu->AppendSeparator();
+        append_menu_item(helpMenu, wxID_ANY, _(L("DEBUG gcode thumbnails")), _(L("DEBUG ONLY - read the selected gcode file and generates png for the contained thumbnails")),
+            [this](wxCommandEvent&) { wxGetApp().gcode_thumbnails_debug(); });
+#endif // ENABLE_THUMBNAIL_GENERATOR
     }
 
     // menubar

From 2d5c28d6d16b05cde3112b3ee4e92db634c975e0 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 25 Oct 2019 13:59:13 +0200
Subject: [PATCH 39/84] ENABLE_THUMBNAIL_GENERATOR -> Allow for multiple
 thumbnails into gcode and sl1 files

---
 src/libslic3r/GCode.cpp                     | 28 ++++++++++------
 src/libslic3r/GCode.hpp                     |  4 +--
 src/libslic3r/Print.cpp                     |  2 +-
 src/libslic3r/Print.hpp                     |  2 +-
 src/slic3r/GUI/BackgroundSlicingProcess.cpp | 22 +++++++++---
 src/slic3r/GUI/BackgroundSlicingProcess.hpp |  6 ++--
 src/slic3r/GUI/Plater.cpp                   | 37 ++++++++++++++++-----
 7 files changed, 70 insertions(+), 31 deletions(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index db493270a..92f733787 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -659,7 +659,7 @@ std::vector<std::pair<coordf_t, std::vector<GCode::LayerToPrint>>> GCode::collec
 }
 
 #if ENABLE_THUMBNAIL_GENERATOR
-void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_data, const ThumbnailData* thumbnail_data)
+void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_data, const std::vector<ThumbnailData>* thumbnail_data)
 #else
 void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_data)
 #endif // ENABLE_THUMBNAIL_GENERATOR
@@ -757,7 +757,7 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_
 }
 
 #if ENABLE_THUMBNAIL_GENERATOR
-void GCode::_do_export(Print& print, FILE* file, const ThumbnailData* thumbnail_data)
+void GCode::_do_export(Print& print, FILE* file, const std::vector<ThumbnailData>* thumbnail_data)
 #else
 void GCode::_do_export(Print &print, FILE *file)
 #endif // ENABLE_THUMBNAIL_GENERATOR
@@ -954,18 +954,24 @@ void GCode::_do_export(Print &print, FILE *file)
     _write_format(file, "; %s\n\n", Slic3r::header_slic3r_generated().c_str());
 
 #if ENABLE_THUMBNAIL_GENERATOR
-    // Write thumbnail using base64 encoding
-    if ((thumbnail_data != nullptr) && thumbnail_data->is_valid())
+    // Write thumbnails using base64 encoding
+    if (thumbnail_data != nullptr)
     {
-        _write_format(file, "\n;\n; thumbnail begin %dx%d\n", thumbnail_data->width, thumbnail_data->height);
-
-        size_t row_size = 4 * thumbnail_data->width;
-        for (int r = (int)thumbnail_data->height - 1; r >= 0; --r)
+        for (const ThumbnailData& data : *thumbnail_data)
         {
-            _write_format(file, "; %s\n", boost::beast::detail::base64_encode((const std::uint8_t*)(thumbnail_data->pixels.data() + r * row_size), row_size).c_str());
-        }
+            if (data.is_valid())
+            {
+                _write_format(file, "\n;\n; thumbnail begin %dx%d\n", data.width, data.height);
 
-        _write(file, "; thumbnail end\n;\n\n");
+                size_t row_size = 4 * data.width;
+                for (int r = (int)data.height - 1; r >= 0; --r)
+                {
+                    _write_format(file, "; %s\n", boost::beast::detail::base64_encode((const std::uint8_t*)(data.pixels.data() + r * row_size), row_size).c_str());
+                }
+
+                _write(file, "; thumbnail end\n;\n\n");
+            }
+        }
     }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp
index 8116d06fc..3183e8883 100644
--- a/src/libslic3r/GCode.hpp
+++ b/src/libslic3r/GCode.hpp
@@ -166,7 +166,7 @@ public:
     // throws std::runtime_exception on error,
     // throws CanceledException through print->throw_if_canceled().
 #if ENABLE_THUMBNAIL_GENERATOR
-    void            do_export(Print* print, const char* path, GCodePreviewData* preview_data = nullptr, const ThumbnailData* thumbnail_data = nullptr);
+    void            do_export(Print* print, const char* path, GCodePreviewData* preview_data = nullptr, const std::vector<ThumbnailData>* thumbnail_data = nullptr);
 #else
     void            do_export(Print *print, const char *path, GCodePreviewData *preview_data = nullptr);
 #endif // ENABLE_THUMBNAIL_GENERATOR
@@ -198,7 +198,7 @@ public:
 
 protected:
 #if ENABLE_THUMBNAIL_GENERATOR
-    void            _do_export(Print& print, FILE* file, const ThumbnailData* thumbnail_data);
+    void            _do_export(Print& print, FILE* file, const std::vector<ThumbnailData>* thumbnail_data);
 #else
     void            _do_export(Print &print, FILE *file);
 #endif //ENABLE_THUMBNAIL_GENERATOR
diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp
index b2ed87ca0..74e541451 100644
--- a/src/libslic3r/Print.cpp
+++ b/src/libslic3r/Print.cpp
@@ -1537,7 +1537,7 @@ void Print::process()
 // write error into the G-code, cannot execute post-processing scripts).
 // It is up to the caller to show an error message.
 #if ENABLE_THUMBNAIL_GENERATOR
-std::string Print::export_gcode(const std::string& path_template, GCodePreviewData* preview_data, const ThumbnailData* thumbnail_data)
+std::string Print::export_gcode(const std::string& path_template, GCodePreviewData* preview_data, const std::vector<ThumbnailData>* thumbnail_data)
 #else
 std::string Print::export_gcode(const std::string &path_template, GCodePreviewData *preview_data)
 #endif // ENABLE_THUMBNAIL_GENERATOR
diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp
index aedeeff18..7e7f875b0 100644
--- a/src/libslic3r/Print.hpp
+++ b/src/libslic3r/Print.hpp
@@ -309,7 +309,7 @@ public:
     // Exports G-code into a file name based on the path_template, returns the file path of the generated G-code file.
     // If preview_data is not null, the preview_data is filled in for the G-code visualization (not used by the command line Slic3r).
 #if ENABLE_THUMBNAIL_GENERATOR
-    std::string         export_gcode(const std::string& path_template, GCodePreviewData* preview_data, const ThumbnailData* thumbnail_data = nullptr);
+    std::string         export_gcode(const std::string& path_template, GCodePreviewData* preview_data, const std::vector<ThumbnailData>* thumbnail_data = nullptr);
 #else
     std::string         export_gcode(const std::string &path_template, GCodePreviewData *preview_data);
 #endif // ENABLE_THUMBNAIL_GENERATOR
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index cedeab910..18f593d77 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -120,7 +120,7 @@ static void write_thumbnail(Zipper& zipper, const ThumbnailData& data)
     void* png_data = tdefl_write_image_to_png_file_in_memory_ex((const void*)data.pixels.data(), data.width, data.height, 4, &png_size, MZ_DEFAULT_LEVEL, 1);
     if (png_data != nullptr)
     {
-        zipper.add_entry("thumbnail/thumbnail.png", (const std::uint8_t*)png_data, png_size);
+        zipper.add_entry("thumbnail/thumbnail" + std::to_string(data.width) + "x" + std::to_string(data.height) + ".png", (const std::uint8_t*)png_data, png_size);
         mz_free(png_data);
     }
 }
@@ -138,8 +138,14 @@ void BackgroundSlicingProcess::process_sla()
             m_sla_print->export_raster(zipper);
 
 #if ENABLE_THUMBNAIL_GENERATOR
-            if ((m_thumbnail_data != nullptr) && m_thumbnail_data->is_valid())
-                write_thumbnail(zipper, *m_thumbnail_data);
+            if (m_thumbnail_data != nullptr)
+            {
+                for (const ThumbnailData& data : *m_thumbnail_data)
+                {
+                    if (data.is_valid())
+                        write_thumbnail(zipper, data);
+                }
+            }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
             zipper.finalize();
@@ -458,8 +464,14 @@ void BackgroundSlicingProcess::prepare_upload()
         Zipper zipper{source_path.string()};
         m_sla_print->export_raster(zipper, m_upload_job.upload_data.upload_path.string());
 #if ENABLE_THUMBNAIL_GENERATOR
-        if ((m_thumbnail_data != nullptr) && m_thumbnail_data->is_valid())
-            write_thumbnail(zipper, *m_thumbnail_data);
+        if (m_thumbnail_data != nullptr)
+        {
+            for (const ThumbnailData& data : *m_thumbnail_data)
+            {
+                if (data.is_valid())
+                    write_thumbnail(zipper, data);
+            }
+        }
 #endif // ENABLE_THUMBNAIL_GENERATOR
         zipper.finalize();
     }
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
index e51a4e961..bf8cbc235 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
@@ -53,7 +53,7 @@ public:
 	void set_sla_print(SLAPrint *print) { m_sla_print = print; }
 	void set_gcode_preview_data(GCodePreviewData *gpd) { m_gcode_preview_data = gpd; }
 #if ENABLE_THUMBNAIL_GENERATOR
-    void set_thumbnail_data(const ThumbnailData* data) { m_thumbnail_data = data; }
+    void set_thumbnail_data(const std::vector<ThumbnailData>* data) { m_thumbnail_data = data; }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
 	// The following wxCommandEvent will be sent to the UI thread / Platter window, when the slicing is finished
@@ -159,8 +159,8 @@ private:
 	// Data structure, to which the G-code export writes its annotations.
 	GCodePreviewData 		   *m_gcode_preview_data = nullptr;
 #if ENABLE_THUMBNAIL_GENERATOR
-    // Data structure, used to write thumbnail into gcode.
-    const ThumbnailData        *m_thumbnail_data = nullptr;
+    // Data structures, used to write thumbnails into gcode.
+    const std::vector<ThumbnailData>* m_thumbnail_data = nullptr;
 #endif // ENABLE_THUMBNAIL_GENERATOR
 	// Temporary G-code, there is one defined for the BackgroundSlicingProcess, differentiated from the other processes by a process ID.
 	std::string 				m_temp_output_path;
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 60a90f1f1..ccfa46abe 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -86,8 +86,8 @@ using Slic3r::Preset;
 using Slic3r::PrintHostJob;
 
 #if ENABLE_THUMBNAIL_GENERATOR
-static const std::pair<unsigned int, unsigned int> THUMBNAIL_SIZE_FFF = { 128, 128 };
-static const std::pair<unsigned int, unsigned int> THUMBNAIL_SIZE_SLA = { 256, 256 };
+static const std::vector < std::pair<unsigned int, unsigned int>> THUMBNAIL_SIZE_FFF = { { 240, 320 }, { 220, 165 }, { 16, 16 } };
+static const std::vector<std::pair<unsigned int, unsigned int>> THUMBNAIL_SIZE_SLA = { { 800, 480 } };
 static const std::pair<unsigned int, unsigned int> THUMBNAIL_SIZE_3MF = { 256, 256 };
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
@@ -1371,7 +1371,7 @@ struct Plater::priv
     PrinterTechnology           printer_technology = ptFFF;
     Slic3r::GCodePreviewData    gcode_preview_data;
 #if ENABLE_THUMBNAIL_GENERATOR
-    Slic3r::ThumbnailData       thumbnail_data;
+    std::vector<Slic3r::ThumbnailData> thumbnail_data;
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
     // GUI elements
@@ -3050,12 +3050,26 @@ bool Plater::priv::restart_background_process(unsigned int state)
         {
             // update thumbnail data
             if (this->printer_technology == ptFFF)
-                // for ptFFF we need to generate the thumbnail before the export of gcode starts
-                generate_thumbnail(this->thumbnail_data, THUMBNAIL_SIZE_FFF.first, THUMBNAIL_SIZE_FFF.second, true, true);
+            {
+                // for ptFFF we need to generate the thumbnails before the export of gcode starts
+                this->thumbnail_data.clear();
+                for (const std::pair<unsigned int, unsigned int>& size : THUMBNAIL_SIZE_FFF)
+                {
+                    this->thumbnail_data.push_back(ThumbnailData());
+                    generate_thumbnail(this->thumbnail_data.back(), size.first, size.second, true, true);
+                }
+            }
             else if (this->printer_technology == ptSLA)
-                // for ptSLA generate thumbnail without supports and pad (not yet calculated)
+            {
+                // for ptSLA generate thumbnails without supports and pad (not yet calculated)
                 // to render also supports and pad see on_slicing_update()
-                generate_thumbnail(this->thumbnail_data, THUMBNAIL_SIZE_SLA.first, THUMBNAIL_SIZE_SLA.second, true, true);
+                this->thumbnail_data.clear();
+                for (const std::pair<unsigned int, unsigned int>& size : THUMBNAIL_SIZE_SLA)
+                {
+                    this->thumbnail_data.push_back(ThumbnailData());
+                    generate_thumbnail(this->thumbnail_data.back(), size.first, size.second, true, true);
+                }
+            }
         }
 #endif // ENABLE_THUMBNAIL_GENERATOR
         // The print is valid and it can be started.
@@ -3402,7 +3416,14 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
         // update thumbnail data
         // for ptSLA generate the thumbnail after supports and pad have been calculated to have them rendered
         if ((this->printer_technology == ptSLA) && (evt.status.percent == -3))
-            generate_thumbnail(this->thumbnail_data, THUMBNAIL_SIZE_SLA.first, THUMBNAIL_SIZE_SLA.second, true, false);
+        {
+            this->thumbnail_data.clear();
+            for (const std::pair<unsigned int, unsigned int>& size : THUMBNAIL_SIZE_SLA)
+            {
+                this->thumbnail_data.push_back(ThumbnailData());
+                generate_thumbnail(this->thumbnail_data.back(), size.first, size.second, true, false);
+            }
+        }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 */
     }

From 24aed8eb71ab3d983589d42fba347664466b223d Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 25 Oct 2019 14:32:31 +0200
Subject: [PATCH 40/84] ENABLE_THUMBNAIL_GENERATOR -> Added missing include

---
 src/slic3r/GUI/GUI_App.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 0b2244d65..c35985f11 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -53,6 +53,7 @@
 
 #if ENABLE_THUMBNAIL_GENERATOR
 #include <boost/beast/core/detail/base64.hpp>
+#include <boost/nowide/fstream.hpp>
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
 namespace Slic3r {

From f36dd833d2fecebe86d351fe0f2933e1c920673c Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 29 Oct 2019 07:32:15 +0100
Subject: [PATCH 41/84] ENABLE_THUMBNAIL_GENERATOR -> Reduce thumbnail size if
 exceeding 3D scene canvas size

---
 src/slic3r/GUI/GLCanvas3D.cpp | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 703321c3c..139ee5fa4 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1658,6 +1658,16 @@ void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w,
     static const float orange[] = { 0.99f, 0.49f, 0.26f };
     static const float gray[] = { 0.64f, 0.64f, 0.64f };
 
+    const Size& cnv_size = get_canvas_size();
+    unsigned int cnv_w = (unsigned int)cnv_size.get_width();
+    unsigned int cnv_h = (unsigned int)cnv_size.get_height();
+    if ((w > cnv_w) || (h > cnv_h))
+    {
+        float ratio = std::min((float)cnv_w / (float)w, (float)cnv_h / (float)h);
+        w = (unsigned int)(ratio * (float)w);
+        h = (unsigned int)(ratio * (float)h);
+    }
+
     thumbnail_data.set(w, h);
 
     GLVolumePtrs visible_volumes;
@@ -1720,7 +1730,6 @@ void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w,
 #endif 
 
     // restore the framebuffer size to avoid flickering on the 3D scene
-    const Size& cnv_size = get_canvas_size();
     m_camera.apply_viewport(0, 0, cnv_size.get_width(), cnv_size.get_height());
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR

From 3ff3eed2b1e0751e823559542975e63d51f62010 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 29 Oct 2019 10:27:51 +0100
Subject: [PATCH 42/84] ENABLE_THUMBNAIL_GENERATOR -> Use off-screen
 framebuffer to render the thumbnail on graphic cards supporting it

---
 src/slic3r/GUI/GLCanvas3D.cpp        | 219 +++++++++++++++++----------
 src/slic3r/GUI/GLCanvas3D.hpp        |   6 +
 src/slic3r/GUI/GLCanvas3DManager.cpp |   6 +
 src/slic3r/GUI/GLCanvas3DManager.hpp |   2 +
 4 files changed, 151 insertions(+), 82 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 139ee5fa4..b40a83682 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1649,88 +1649,10 @@ void GLCanvas3D::render()
 #if ENABLE_THUMBNAIL_GENERATOR
 void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
 {
-    auto is_visible = [](const GLVolume& v) -> bool {
-        bool ret = v.printable;
-        ret &= (!v.shader_outside_printer_detection_enabled || !v.is_outside);
-        return ret;
-    };
-
-    static const float orange[] = { 0.99f, 0.49f, 0.26f };
-    static const float gray[] = { 0.64f, 0.64f, 0.64f };
-
-    const Size& cnv_size = get_canvas_size();
-    unsigned int cnv_w = (unsigned int)cnv_size.get_width();
-    unsigned int cnv_h = (unsigned int)cnv_size.get_height();
-    if ((w > cnv_w) || (h > cnv_h))
-    {
-        float ratio = std::min((float)cnv_w / (float)w, (float)cnv_h / (float)h);
-        w = (unsigned int)(ratio * (float)w);
-        h = (unsigned int)(ratio * (float)h);
-    }
-
-    thumbnail_data.set(w, h);
-
-    GLVolumePtrs visible_volumes;
-
-    for (GLVolume* vol : m_volumes.volumes)
-    {
-        if (!vol->is_modifier && !vol->is_wipe_tower && (!parts_only || (vol->composite_id.volume_id >= 0)))
-        {
-            if (!printable_only || is_visible(*vol))
-                visible_volumes.push_back(vol);
-        }
-    }
-
-    if (visible_volumes.empty())
-        return;
-
-    BoundingBoxf3 box;
-    for (const GLVolume* vol : visible_volumes)
-    {
-        box.merge(vol->transformed_bounding_box());
-    }
-
-    Camera camera;
-    camera.zoom_to_box(box, thumbnail_data.width, thumbnail_data.height);
-    camera.apply_viewport(0, 0, thumbnail_data.width, thumbnail_data.height);
-    camera.apply_view_matrix();
-    camera.apply_projection(box);
-
-    glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
-    glsafe(::glEnable(GL_LIGHTING));
-    glsafe(::glEnable(GL_DEPTH_TEST));
-
-    for (const GLVolume* vol : visible_volumes)
-    {
-        glsafe(::glColor3fv((vol->printable && !vol->is_outside) ? orange : gray));
-        vol->render();
-    }
-
-    glsafe(::glDisable(GL_DEPTH_TEST));
-    glsafe(::glDisable(GL_LIGHTING));
-    glsafe(::glReadPixels(0, 0, thumbnail_data.width, thumbnail_data.height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
-
-#if 0
-    // debug export of generated image
-    wxImage image(thumbnail_data.width, thumbnail_data.height);
-    image.InitAlpha();
-
-    for (unsigned int r = 0; r < thumbnail_data.height; ++r)
-    {
-        unsigned int rr = (thumbnail_data.height - 1 - r) * thumbnail_data.width;
-        for (unsigned int c = 0; c < thumbnail_data.width; ++c)
-        {
-            unsigned char* px = thumbnail_data.pixels.data() + 4 * (rr + c);
-            image.SetRGB((int)c, (int)r, px[0], px[1], px[2]);
-            image.SetAlpha((int)c, (int)r, px[3]);
-        }
-    }
-
-    image.SaveFile("C:/test.png", wxBITMAP_TYPE_PNG);
-#endif 
-
-    // restore the framebuffer size to avoid flickering on the 3D scene
-    m_camera.apply_viewport(0, 0, cnv_size.get_width(), cnv_size.get_height());
+    if (GLCanvas3DManager::are_framebuffers_supported())
+        _render_thumbnail_framebuffer(thumbnail_data, w, h, printable_only, parts_only);
+    else
+        _render_thumbnail_legacy(thumbnail_data, w, h, printable_only, parts_only);
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
@@ -3644,6 +3566,139 @@ void GLCanvas3D::_render_undo_redo_stack(const bool is_undo, float pos_x)
     imgui->end();
 }
 
+#if ENABLE_THUMBNAIL_GENERATOR
+static void render_volumes_in_thumbnail(const GLVolumePtrs& volumes, ThumbnailData& thumbnail_data, bool printable_only, bool parts_only)
+{
+    auto is_visible = [](const GLVolume& v) -> bool
+    {
+        bool ret = v.printable;
+        ret &= (!v.shader_outside_printer_detection_enabled || !v.is_outside);
+        return ret;
+    };
+
+    static const float orange[] = { 0.99f, 0.49f, 0.26f };
+    static const float gray[] = { 0.64f, 0.64f, 0.64f };
+
+    GLVolumePtrs visible_volumes;
+
+    for (GLVolume* vol : volumes)
+    {
+        if (!vol->is_modifier && !vol->is_wipe_tower && (!parts_only || (vol->composite_id.volume_id >= 0)))
+        {
+            if (!printable_only || is_visible(*vol))
+                visible_volumes.push_back(vol);
+        }
+    }
+
+    if (visible_volumes.empty())
+        return;
+
+    BoundingBoxf3 box;
+    for (const GLVolume* vol : visible_volumes)
+    {
+        box.merge(vol->transformed_bounding_box());
+    }
+
+    Camera camera;
+    camera.zoom_to_box(box, thumbnail_data.width, thumbnail_data.height);
+    camera.apply_viewport(0, 0, thumbnail_data.width, thumbnail_data.height);
+    camera.apply_view_matrix();
+    camera.apply_projection(box);
+
+    glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
+    glsafe(::glEnable(GL_LIGHTING));
+    glsafe(::glEnable(GL_DEPTH_TEST));
+
+    for (const GLVolume* vol : visible_volumes)
+    {
+        glsafe(::glColor3fv((vol->printable && !vol->is_outside) ? orange : gray));
+        vol->render();
+    }
+
+    glsafe(::glDisable(GL_DEPTH_TEST));
+    glsafe(::glDisable(GL_LIGHTING));
+    glsafe(::glReadPixels(0, 0, thumbnail_data.width, thumbnail_data.height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
+
+#if 0
+    // debug export of generated image
+    wxImage image(thumbnail_data.width, thumbnail_data.height);
+    image.InitAlpha();
+
+    for (unsigned int r = 0; r < thumbnail_data.height; ++r)
+    {
+        unsigned int rr = (thumbnail_data.height - 1 - r) * thumbnail_data.width;
+        for (unsigned int c = 0; c < thumbnail_data.width; ++c)
+        {
+            unsigned char* px = thumbnail_data.pixels.data() + 4 * (rr + c);
+            image.SetRGB((int)c, (int)r, px[0], px[1], px[2]);
+            image.SetAlpha((int)c, (int)r, px[3]);
+        }
+    }
+
+    image.SaveFile("C:/prusa/test/test.png", wxBITMAP_TYPE_PNG);
+#endif 
+}
+
+void GLCanvas3D::_render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
+{
+    thumbnail_data.set(w, h);
+    if (!thumbnail_data.is_valid())
+        return;
+
+    GLuint fbo;
+    glsafe(::glGenFramebuffers(1, &fbo));
+    glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, fbo));
+
+    GLuint tex;
+    glsafe(::glGenTextures(1, &tex));
+    glsafe(::glBindTexture(GL_TEXTURE_2D, tex));
+    glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr));
+    glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
+    glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
+    glsafe(::glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0));
+
+    GLuint depth;
+    glsafe(::glGenRenderbuffers(1, &depth));
+    glsafe(::glBindRenderbuffer(GL_RENDERBUFFER, depth));
+    glsafe(::glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, w, h));
+    glsafe(::glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth));
+
+    GLenum drawBufs[] = { GL_COLOR_ATTACHMENT0 };
+    glsafe(::glDrawBuffers(1, drawBufs));
+
+    if (::glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE)
+        render_volumes_in_thumbnail(m_volumes.volumes, thumbnail_data, printable_only, parts_only);
+
+    glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, 0));
+    glsafe(::glDeleteRenderbuffers(1, &depth));
+    glsafe(::glDeleteTextures(1, &tex));
+    glsafe(::glDeleteFramebuffers(1, &fbo));
+}
+
+void GLCanvas3D::_render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
+{
+    // check that thumbnail size does not exceed the default framebuffer size
+    const Size& cnv_size = get_canvas_size();
+    unsigned int cnv_w = (unsigned int)cnv_size.get_width();
+    unsigned int cnv_h = (unsigned int)cnv_size.get_height();
+    if ((w > cnv_w) || (h > cnv_h))
+    {
+        float ratio = std::min((float)cnv_w / (float)w, (float)cnv_h / (float)h);
+        w = (unsigned int)(ratio * (float)w);
+        h = (unsigned int)(ratio * (float)h);
+    }
+
+    thumbnail_data.set(w, h);
+    if (!thumbnail_data.is_valid())
+        return;
+
+    render_volumes_in_thumbnail(m_volumes.volumes, thumbnail_data, printable_only, parts_only);
+
+    // restore the default framebuffer size to avoid flickering on the 3D scene
+    m_camera.apply_viewport(0, 0, cnv_size.get_width(), cnv_size.get_height());
+}
+#endif // ENABLE_THUMBNAIL_GENERATOR
+
 bool GLCanvas3D::_init_toolbars()
 {
     if (!_init_main_toolbar())
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 5b06b6311..fce4661a4 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -674,6 +674,12 @@ private:
     void _render_sla_slices() const;
     void _render_selection_sidebar_hints() const;
     void _render_undo_redo_stack(const bool is_undo, float pos_x);
+#if ENABLE_THUMBNAIL_GENERATOR
+    // render thumbnail using an off-screen framebuffer
+    void _render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only);
+    // render thumbnail using the default framebuffer
+    void _render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only);
+#endif // ENABLE_THUMBNAIL_GENERATOR
 
     void _update_volumes_hover_state() const;
 
diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp
index 9690e8a8d..03daa0b00 100644
--- a/src/slic3r/GUI/GLCanvas3DManager.cpp
+++ b/src/slic3r/GUI/GLCanvas3DManager.cpp
@@ -189,6 +189,7 @@ std::string GLCanvas3DManager::GLInfo::to_string(bool format_as_html, bool exten
 
 GLCanvas3DManager::EMultisampleState GLCanvas3DManager::s_multisample = GLCanvas3DManager::MS_Unknown;
 bool GLCanvas3DManager::s_compressed_textures_supported = false;
+bool GLCanvas3DManager::s_framebuffers_supported = false;
 GLCanvas3DManager::GLInfo GLCanvas3DManager::s_gl_info;
 
 GLCanvas3DManager::GLCanvas3DManager()
@@ -269,6 +270,11 @@ void GLCanvas3DManager::init_gl()
         else
             s_compressed_textures_supported = false;
 
+        if (s_gl_info.is_version_greater_or_equal_to(3, 0) && GLEW_ARB_framebuffer_object)
+            s_framebuffers_supported = true;
+        else
+            s_framebuffers_supported = false;
+
         if (! s_gl_info.is_version_greater_or_equal_to(2, 0)) {
         	// Complain about the OpenGL version.
         	wxString message = wxString::Format(
diff --git a/src/slic3r/GUI/GLCanvas3DManager.hpp b/src/slic3r/GUI/GLCanvas3DManager.hpp
index 760266a27..a2e35f811 100644
--- a/src/slic3r/GUI/GLCanvas3DManager.hpp
+++ b/src/slic3r/GUI/GLCanvas3DManager.hpp
@@ -77,6 +77,7 @@ private:
     bool m_gl_initialized;
     static EMultisampleState s_multisample;
     static bool s_compressed_textures_supported;
+    static bool s_framebuffers_supported;
 
 public:
     GLCanvas3DManager();
@@ -97,6 +98,7 @@ public:
 
     static bool can_multisample() { return s_multisample == MS_Enabled; }
     static bool are_compressed_textures_supported() { return s_compressed_textures_supported; }
+    static bool are_framebuffers_supported() { return s_framebuffers_supported; }
 
     static wxGLCanvas* create_wxglcanvas(wxWindow *parent);
 

From a7b4b232e95bbe2751631dcf2ef1bd192c4a18cf Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 29 Oct 2019 14:45:15 +0100
Subject: [PATCH 43/84] ENABLE_THUMBNAIL_GENERATOR -> Use multisampling when
 generating thumbnail using off-screen framebuffer

---
 src/slic3r/GUI/GLCanvas3D.cpp | 152 +++++++++++++++++++++++++---------
 1 file changed, 114 insertions(+), 38 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index b40a83682..ae2f4989f 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -3567,6 +3567,29 @@ void GLCanvas3D::_render_undo_redo_stack(const bool is_undo, float pos_x)
 }
 
 #if ENABLE_THUMBNAIL_GENERATOR
+#define ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT 0
+#if ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
+static void debug_output_thumbnail(const ThumbnailData& thumbnail_data)
+{
+    // debug export of generated image
+    wxImage image(thumbnail_data.width, thumbnail_data.height);
+    image.InitAlpha();
+
+    for (unsigned int r = 0; r < thumbnail_data.height; ++r)
+    {
+        unsigned int rr = (thumbnail_data.height - 1 - r) * thumbnail_data.width;
+        for (unsigned int c = 0; c < thumbnail_data.width; ++c)
+        {
+            unsigned char* px = (unsigned char*)thumbnail_data.pixels.data() + 4 * (rr + c);
+            image.SetRGB((int)c, (int)r, px[0], px[1], px[2]);
+            image.SetAlpha((int)c, (int)r, px[3]);
+        }
+    }
+
+    image.SaveFile("C:/prusa/test/test.png", wxBITMAP_TYPE_PNG);
+}
+#endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
+
 static void render_volumes_in_thumbnail(const GLVolumePtrs& volumes, ThumbnailData& thumbnail_data, bool printable_only, bool parts_only)
 {
     auto is_visible = [](const GLVolume& v) -> bool
@@ -3617,26 +3640,6 @@ static void render_volumes_in_thumbnail(const GLVolumePtrs& volumes, ThumbnailDa
 
     glsafe(::glDisable(GL_DEPTH_TEST));
     glsafe(::glDisable(GL_LIGHTING));
-    glsafe(::glReadPixels(0, 0, thumbnail_data.width, thumbnail_data.height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
-
-#if 0
-    // debug export of generated image
-    wxImage image(thumbnail_data.width, thumbnail_data.height);
-    image.InitAlpha();
-
-    for (unsigned int r = 0; r < thumbnail_data.height; ++r)
-    {
-        unsigned int rr = (thumbnail_data.height - 1 - r) * thumbnail_data.width;
-        for (unsigned int c = 0; c < thumbnail_data.width; ++c)
-        {
-            unsigned char* px = thumbnail_data.pixels.data() + 4 * (rr + c);
-            image.SetRGB((int)c, (int)r, px[0], px[1], px[2]);
-            image.SetAlpha((int)c, (int)r, px[3]);
-        }
-    }
-
-    image.SaveFile("C:/prusa/test/test.png", wxBITMAP_TYPE_PNG);
-#endif 
 }
 
 void GLCanvas3D::_render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
@@ -3645,34 +3648,102 @@ void GLCanvas3D::_render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, un
     if (!thumbnail_data.is_valid())
         return;
 
-    GLuint fbo;
-    glsafe(::glGenFramebuffers(1, &fbo));
-    glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, fbo));
+    bool multisample = m_multisample_allowed;
+    if (multisample)
+        glsafe(::glEnable(GL_MULTISAMPLE));
 
-    GLuint tex;
-    glsafe(::glGenTextures(1, &tex));
-    glsafe(::glBindTexture(GL_TEXTURE_2D, tex));
-    glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr));
-    glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
-    glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
-    glsafe(::glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0));
+    GLint max_samples;
+    glsafe(::glGetIntegerv(GL_MAX_SAMPLES, &max_samples));
+    GLsizei num_samples = max_samples / 2;
 
-    GLuint depth;
-    glsafe(::glGenRenderbuffers(1, &depth));
-    glsafe(::glBindRenderbuffer(GL_RENDERBUFFER, depth));
-    glsafe(::glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, w, h));
-    glsafe(::glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth));
+    GLuint render_fbo;
+    glsafe(::glGenFramebuffers(1, &render_fbo));
+    glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, render_fbo));
+
+    GLuint render_tex = 0;
+    GLuint render_tex_buffer = 0;
+    if (multisample)
+    {
+        // use renderbuffer instead of texture to avoid the need to use glTexImage2DMultisample which is available only since OpenGL 3.2
+        glsafe(::glGenRenderbuffers(1, &render_tex_buffer));
+        glsafe(::glBindRenderbuffer(GL_RENDERBUFFER, render_tex_buffer));
+        glsafe(::glRenderbufferStorageMultisample(GL_RENDERBUFFER, num_samples, GL_RGBA8, w, h));
+        glsafe(::glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, render_tex_buffer));
+    }
+    else
+    {
+        glsafe(::glGenTextures(1, &render_tex));
+        glsafe(::glBindTexture(GL_TEXTURE_2D, render_tex));
+        glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr));
+        glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
+        glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
+        glsafe(::glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, render_tex, 0));
+    }
+
+    GLuint render_depth;
+    glsafe(::glGenRenderbuffers(1, &render_depth));
+    glsafe(::glBindRenderbuffer(GL_RENDERBUFFER, render_depth));
+    if (multisample)
+        glsafe(::glRenderbufferStorageMultisample(GL_RENDERBUFFER, num_samples, GL_DEPTH_COMPONENT24, w, h));
+    else
+        glsafe(::glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, w, h));
+
+    glsafe(::glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, render_depth));
 
     GLenum drawBufs[] = { GL_COLOR_ATTACHMENT0 };
     glsafe(::glDrawBuffers(1, drawBufs));
 
     if (::glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE)
+    {
         render_volumes_in_thumbnail(m_volumes.volumes, thumbnail_data, printable_only, parts_only);
 
+        if (multisample)
+        {
+            GLuint resolve_fbo;
+            glsafe(::glGenFramebuffers(1, &resolve_fbo));
+            glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, resolve_fbo));
+
+            GLuint resolve_tex;
+            glsafe(::glGenTextures(1, &resolve_tex));
+            glsafe(::glBindTexture(GL_TEXTURE_2D, resolve_tex));
+            glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr));
+            glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
+            glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
+            glsafe(::glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, resolve_tex, 0));
+
+            glsafe(::glDrawBuffers(1, drawBufs));
+
+            if (::glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE)
+            {
+                glsafe(::glBindFramebuffer(GL_READ_FRAMEBUFFER, render_fbo));
+                glsafe(::glBindFramebuffer(GL_DRAW_FRAMEBUFFER, resolve_fbo));
+                glsafe(::glBlitFramebuffer(0, 0, w, h, 0, 0, w, h, GL_COLOR_BUFFER_BIT, GL_LINEAR));
+
+                glsafe(::glBindFramebuffer(GL_READ_FRAMEBUFFER, resolve_fbo));
+                glsafe(::glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
+            }
+
+            glsafe(::glDeleteTextures(1, &resolve_tex));
+            glsafe(::glDeleteFramebuffers(1, &resolve_fbo));
+        }
+        else
+            glsafe(::glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
+
+#if ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
+        debug_output_thumbnail(thumbnail_data);
+#endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
+    }
+
     glsafe(::glBindFramebuffer(GL_FRAMEBUFFER, 0));
-    glsafe(::glDeleteRenderbuffers(1, &depth));
-    glsafe(::glDeleteTextures(1, &tex));
-    glsafe(::glDeleteFramebuffers(1, &fbo));
+    glsafe(::glDeleteRenderbuffers(1, &render_depth));
+    if (render_tex_buffer != 0)
+        glsafe(::glDeleteRenderbuffers(1, &render_tex_buffer));
+    if (render_tex != 0)
+        glsafe(::glDeleteTextures(1, &render_tex));
+    glsafe(::glDeleteFramebuffers(1, &render_fbo));
+
+    if (multisample)
+        glsafe(::glDisable(GL_MULTISAMPLE));
 }
 
 void GLCanvas3D::_render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
@@ -3694,6 +3765,11 @@ void GLCanvas3D::_render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigne
 
     render_volumes_in_thumbnail(m_volumes.volumes, thumbnail_data, printable_only, parts_only);
 
+    glsafe(::glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
+#if ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
+    debug_output_thumbnail(thumbnail_data);
+#endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
+
     // restore the default framebuffer size to avoid flickering on the 3D scene
     m_camera.apply_viewport(0, 0, cnv_size.get_width(), cnv_size.get_height());
 }

From f6453aab1b1569fd5ac7df02232ff4dff37159a7 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Wed, 30 Oct 2019 10:09:58 +0100
Subject: [PATCH 44/84] ENABLE_THUMBNAIL_GENERATOR -> Fixed potential race
 condition when generating thumbnails

---
 src/libslic3r/GCode.cpp   | 1 +
 src/slic3r/GUI/Plater.cpp | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 92f733787..ebb82cfb2 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -971,6 +971,7 @@ void GCode::_do_export(Print &print, FILE *file)
 
                 _write(file, "; thumbnail end\n;\n\n");
             }
+            print.throw_if_canceled();
         }
     }
 #endif // ENABLE_THUMBNAIL_GENERATOR
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index f56d6fc27..464093712 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -3046,7 +3046,8 @@ bool Plater::priv::restart_background_process(unsigned int state)
            (state & UPDATE_BACKGROUND_PROCESS_FORCE_EXPORT) != 0 ||
            (state & UPDATE_BACKGROUND_PROCESS_RESTART) != 0 ) ) {
 #if ENABLE_THUMBNAIL_GENERATOR
-        if ((state & UPDATE_BACKGROUND_PROCESS_FORCE_EXPORT) == 0)
+        if (((state & UPDATE_BACKGROUND_PROCESS_FORCE_EXPORT) == 0) &&
+             (this->background_process.state() != BackgroundSlicingProcess::STATE_RUNNING))
         {
             // update thumbnail data
             if (this->printer_technology == ptFFF)

From 636e446da169940956a27e1d2fa0f240c8929adb Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 31 Oct 2019 16:40:38 +0100
Subject: [PATCH 45/84] ENABLE_THUMBNAIL_GENERATOR -> Changes to zoom factor
 and centering algorithm when rendering thumbnails

---
 src/slic3r/GUI/Camera.cpp     | 102 +++++++++++++++++++++++++++++++++-
 src/slic3r/GUI/Camera.hpp     |  17 ++++++
 src/slic3r/GUI/GLCanvas3D.cpp |  15 ++++-
 src/slic3r/GUI/GLCanvas3D.hpp |   8 +++
 4 files changed, 140 insertions(+), 2 deletions(-)

diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp
index 8e3a6d1f1..b5aac32ed 100644
--- a/src/slic3r/GUI/Camera.cpp
+++ b/src/slic3r/GUI/Camera.cpp
@@ -1,7 +1,9 @@
 #include "libslic3r/libslic3r.h"
 
 #include "Camera.hpp"
+#if !ENABLE_THUMBNAIL_GENERATOR
 #include "3DScene.hpp"
+#endif // !ENABLE_THUMBNAIL_GENERATOR
 #include "GUI_App.hpp"
 #include "AppConfig.hpp"
 
@@ -22,6 +24,10 @@ namespace Slic3r {
 namespace GUI {
 
 const double Camera::DefaultDistance = 1000.0;
+#if ENABLE_THUMBNAIL_GENERATOR
+const double Camera::DefaultZoomToBoxMarginFactor = 1.0;
+const double Camera::DefaultZoomToVolumesMarginFactor = 1.1;
+#endif // ENABLE_THUMBNAIL_GENERATOR
 double Camera::FrustrumMinZRange = 50.0;
 double Camera::FrustrumMinNearZ = 100.0;
 double Camera::FrustrumZMargin = 10.0;
@@ -266,10 +272,18 @@ void Camera::apply_projection(const BoundingBoxf3& box) const
     glsafe(::glMatrixMode(GL_MODELVIEW));
 }
 
+#if ENABLE_THUMBNAIL_GENERATOR
+void Camera::zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h, double margin_factor)
+#else
 void Camera::zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h)
+#endif // ENABLE_THUMBNAIL_GENERATOR
 {
     // Calculate the zoom factor needed to adjust the view around the given box.
+#if ENABLE_THUMBNAIL_GENERATOR
+    double zoom = calc_zoom_to_bounding_box_factor(box, canvas_w, canvas_h, margin_factor);
+#else
     double zoom = calc_zoom_to_bounding_box_factor(box, canvas_w, canvas_h);
+#endif // ENABLE_THUMBNAIL_GENERATOR
     if (zoom > 0.0)
     {
         m_zoom = zoom;
@@ -278,6 +292,20 @@ void Camera::zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h)
     }
 }
 
+#if ENABLE_THUMBNAIL_GENERATOR
+void Camera::zoom_to_volumes(const GLVolumePtrs& volumes, int canvas_w, int canvas_h, double margin_factor)
+{
+    Vec3d center;
+    double zoom = calc_zoom_to_volumes_factor(volumes, canvas_w, canvas_h, center, margin_factor);
+    if (zoom > 0.0)
+    {
+        m_zoom = zoom;
+        // center view around the calculated center
+        m_target = center;
+    }
+}
+#endif // ENABLE_THUMBNAIL_GENERATOR
+
 #if ENABLE_CAMERA_STATISTICS
 void Camera::debug_render() const
 {
@@ -372,7 +400,11 @@ std::pair<double, double> Camera::calc_tight_frustrum_zs_around(const BoundingBo
     return ret;
 }
 
+#if ENABLE_THUMBNAIL_GENERATOR
+double Camera::calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int canvas_w, int canvas_h, double margin_factor) const
+#else
 double Camera::calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int canvas_w, int canvas_h) const
+#endif // ENABLE_THUMBNAIL_GENERATOR
 {
     double max_bb_size = box.max_size();
     if (max_bb_size == 0.0)
@@ -405,13 +437,15 @@ double Camera::calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int ca
     double max_x = 0.0;
     double max_y = 0.0;
 
+#if !ENABLE_THUMBNAIL_GENERATOR
     // margin factor to give some empty space around the box
     double margin_factor = 1.25;
+#endif // !ENABLE_THUMBNAIL_GENERATOR
 
     for (const Vec3d& v : vertices)
     {
         // project vertex on the plane perpendicular to camera forward axis
-        Vec3d pos(v(0) - bb_center(0), v(1) - bb_center(1), v(2) - bb_center(2));
+        Vec3d pos = v - bb_center;
         Vec3d proj_on_plane = pos - pos.dot(forward) * forward;
 
         // calculates vertex coordinate along camera xy axes
@@ -431,6 +465,72 @@ double Camera::calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int ca
     return std::min((double)canvas_w / (2.0 * max_x), (double)canvas_h / (2.0 * max_y));
 }
 
+#if ENABLE_THUMBNAIL_GENERATOR
+double Camera::calc_zoom_to_volumes_factor(const GLVolumePtrs& volumes, int canvas_w, int canvas_h, Vec3d& center, double margin_factor) const
+{
+    if (volumes.empty())
+        return -1.0;
+
+    // project the volumes vertices on a plane perpendicular to the camera forward axis
+    // then calculates the vertices coordinate on this plane along the camera xy axes
+
+    // ensure that the view matrix is updated
+    apply_view_matrix();
+
+    Vec3d right = get_dir_right();
+    Vec3d up = get_dir_up();
+    Vec3d forward = get_dir_forward();
+
+    BoundingBoxf3 box;
+    for (const GLVolume* volume : volumes)
+    {
+        box.merge(volume->transformed_bounding_box());
+    }
+    center = box.center();
+
+    double min_x = DBL_MAX;
+    double min_y = DBL_MAX;
+    double max_x = -DBL_MAX;
+    double max_y = -DBL_MAX;
+
+    for (const GLVolume* volume : volumes)
+    {
+        const Transform3d& transform = volume->world_matrix();
+        const TriangleMesh* hull = volume->convex_hull();
+        if (hull == nullptr)
+            continue;
+
+        for (const Vec3f& vertex : hull->its.vertices)
+        {
+            Vec3d v = transform * vertex.cast<double>();
+
+            // project vertex on the plane perpendicular to camera forward axis
+            Vec3d pos = v - center;
+            Vec3d proj_on_plane = pos - pos.dot(forward) * forward;
+
+            // calculates vertex coordinate along camera xy axes
+            double x_on_plane = proj_on_plane.dot(right);
+            double y_on_plane = proj_on_plane.dot(up);
+
+            min_x = std::min(min_x, x_on_plane);
+            min_y = std::min(min_y, y_on_plane);
+            max_x = std::max(max_x, x_on_plane);
+            max_y = std::max(max_y, y_on_plane);
+        }
+    }
+
+    center += 0.5 * (max_x + min_x) * right + 0.5 * (max_y + min_y) * up;
+
+    double dx = margin_factor * (max_x - min_x);
+    double dy = margin_factor * (max_y - min_y);
+
+    if ((dx == 0.0) || (dy == 0.0))
+        return -1.0f;
+
+    return std::min((double)canvas_w / dx, (double)canvas_h / dy);
+}
+#endif // ENABLE_THUMBNAIL_GENERATOR
+
 void Camera::set_distance(double distance) const
 {
     m_distance = distance;
diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp
index 839d0d6cf..cb634138f 100644
--- a/src/slic3r/GUI/Camera.hpp
+++ b/src/slic3r/GUI/Camera.hpp
@@ -2,6 +2,9 @@
 #define slic3r_Camera_hpp_
 
 #include "libslic3r/BoundingBox.hpp"
+#if ENABLE_THUMBNAIL_GENERATOR
+#include "3DScene.hpp"
+#endif // ENABLE_THUMBNAIL_GENERATOR
 #include <array>
 
 namespace Slic3r {
@@ -10,6 +13,10 @@ namespace GUI {
 struct Camera
 {
     static const double DefaultDistance;
+#if ENABLE_THUMBNAIL_GENERATOR
+    static const double DefaultZoomToBoxMarginFactor;
+    static const double DefaultZoomToVolumesMarginFactor;
+#endif // ENABLE_THUMBNAIL_GENERATOR
     static double FrustrumMinZRange;
     static double FrustrumMinNearZ;
     static double FrustrumZMargin;
@@ -90,7 +97,12 @@ public:
     void apply_view_matrix() const;
     void apply_projection(const BoundingBoxf3& box) const;
 
+#if ENABLE_THUMBNAIL_GENERATOR
+    void zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h, double margin_factor = DefaultZoomToBoxMarginFactor);
+    void zoom_to_volumes(const GLVolumePtrs& volumes, int canvas_w, int canvas_h, double margin_factor = DefaultZoomToVolumesMarginFactor);
+#else
     void zoom_to_box(const BoundingBoxf3& box, int canvas_w, int canvas_h);
+#endif // ENABLE_THUMBNAIL_GENERATOR
 
 #if ENABLE_CAMERA_STATISTICS
     void debug_render() const;
@@ -100,7 +112,12 @@ private:
     // returns tight values for nearZ and farZ plane around the given bounding box
     // the camera MUST be outside of the bounding box in eye coordinate of the given box
     std::pair<double, double> calc_tight_frustrum_zs_around(const BoundingBoxf3& box) const;
+#if ENABLE_THUMBNAIL_GENERATOR
+    double calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int canvas_w, int canvas_h, double margin_factor = DefaultZoomToBoxMarginFactor) const;
+    double calc_zoom_to_volumes_factor(const GLVolumePtrs& volumes, int canvas_w, int canvas_h, Vec3d& center, double margin_factor = DefaultZoomToVolumesMarginFactor) const;
+#else
     double calc_zoom_to_bounding_box_factor(const BoundingBoxf3& box, int canvas_w, int canvas_h) const;
+#endif // ENABLE_THUMBNAIL_GENERATOR
     void set_distance(double distance) const;
 };
 
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index cddae1f86..a49c772d3 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1119,6 +1119,10 @@ wxDEFINE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent);
 wxDEFINE_EVENT(EVT_GLCANVAS_REDO, SimpleEvent);
 
+#if ENABLE_THUMBNAIL_GENERATOR
+const double GLCanvas3D::DefaultCameraZoomToBoxMarginFactor = 1.25;
+#endif // ENABLE_THUMBNAIL_GENERATOR
+
 GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar)
     : m_canvas(canvas)
     , m_context(nullptr)
@@ -3623,7 +3627,7 @@ static void render_volumes_in_thumbnail(const GLVolumePtrs& volumes, ThumbnailDa
     }
 
     Camera camera;
-    camera.zoom_to_box(box, thumbnail_data.width, thumbnail_data.height);
+    camera.zoom_to_volumes(visible_volumes, thumbnail_data.width, thumbnail_data.height);
     camera.apply_viewport(0, 0, thumbnail_data.width, thumbnail_data.height);
     camera.apply_view_matrix();
     camera.apply_projection(box);
@@ -4086,12 +4090,21 @@ BoundingBoxf3 GLCanvas3D::_max_bounding_box(bool include_gizmos, bool include_be
     return bb;
 }
 
+#if ENABLE_THUMBNAIL_GENERATOR
+void GLCanvas3D::_zoom_to_box(const BoundingBoxf3& box, double margin_factor)
+{
+    const Size& cnv_size = get_canvas_size();
+    m_camera.zoom_to_box(box, cnv_size.get_width(), cnv_size.get_height(), margin_factor);
+    m_dirty = true;
+}
+#else
 void GLCanvas3D::_zoom_to_box(const BoundingBoxf3& box)
 {
     const Size& cnv_size = get_canvas_size();
     m_camera.zoom_to_box(box, cnv_size.get_width(), cnv_size.get_height());
     m_dirty = true;
 }
+#endif // ENABLE_THUMBNAIL_GENERATOR
 
 void GLCanvas3D::_refresh_if_shown_on_screen()
 {
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index fce4661a4..850e851fa 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -107,6 +107,10 @@ wxDECLARE_EVENT(EVT_GLCANVAS_REDO, SimpleEvent);
 
 class GLCanvas3D
 {
+#if ENABLE_THUMBNAIL_GENERATOR
+    static const double DefaultCameraZoomToBoxMarginFactor;
+#endif // ENABLE_THUMBNAIL_GENERATOR
+
 public:
     struct GCodePreviewVolumeIndex
     {
@@ -646,7 +650,11 @@ private:
 
     BoundingBoxf3 _max_bounding_box(bool include_gizmos, bool include_bed_model) const;
 
+#if ENABLE_THUMBNAIL_GENERATOR
+    void _zoom_to_box(const BoundingBoxf3& box, double margin_factor = DefaultCameraZoomToBoxMarginFactor);
+#else
     void _zoom_to_box(const BoundingBoxf3& box);
+#endif // ENABLE_THUMBNAIL_GENERATOR
 
     void _refresh_if_shown_on_screen();
 

From bf8fcabb29836321dc5252439cd1b4ead0e2537f Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 31 Oct 2019 17:03:33 +0100
Subject: [PATCH 46/84] ENABLE_THUMBNAIL_GENERATOR -> Use orthographic camera
 when rendering thumbnails

---
 src/slic3r/GUI/Camera.cpp     | 2 +-
 src/slic3r/GUI/GLCanvas3D.cpp | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp
index b5aac32ed..94d673e82 100644
--- a/src/slic3r/GUI/Camera.cpp
+++ b/src/slic3r/GUI/Camera.cpp
@@ -26,7 +26,7 @@ namespace GUI {
 const double Camera::DefaultDistance = 1000.0;
 #if ENABLE_THUMBNAIL_GENERATOR
 const double Camera::DefaultZoomToBoxMarginFactor = 1.0;
-const double Camera::DefaultZoomToVolumesMarginFactor = 1.1;
+const double Camera::DefaultZoomToVolumesMarginFactor = 1.0;
 #endif // ENABLE_THUMBNAIL_GENERATOR
 double Camera::FrustrumMinZRange = 50.0;
 double Camera::FrustrumMinNearZ = 100.0;
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index a49c772d3..4e36739ac 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -3627,6 +3627,7 @@ static void render_volumes_in_thumbnail(const GLVolumePtrs& volumes, ThumbnailDa
     }
 
     Camera camera;
+    camera.set_type(Camera::Ortho);
     camera.zoom_to_volumes(visible_volumes, thumbnail_data.width, thumbnail_data.height);
     camera.apply_viewport(0, 0, thumbnail_data.width, thumbnail_data.height);
     camera.apply_view_matrix();

From f94f75d481c5739ceae297aa76aa5602920c642d Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 1 Nov 2019 12:19:27 +0100
Subject: [PATCH 47/84] ENABLE_THUMBNAIL_GENERATOR -> Render thumbnails using
 shader

---
 src/slic3r/GUI/Camera.cpp     |  4 ++--
 src/slic3r/GUI/GLCanvas3D.cpp | 35 +++++++++++++++++++++++++++--------
 2 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp
index 94d673e82..9fbabe930 100644
--- a/src/slic3r/GUI/Camera.cpp
+++ b/src/slic3r/GUI/Camera.cpp
@@ -25,8 +25,8 @@ namespace GUI {
 
 const double Camera::DefaultDistance = 1000.0;
 #if ENABLE_THUMBNAIL_GENERATOR
-const double Camera::DefaultZoomToBoxMarginFactor = 1.0;
-const double Camera::DefaultZoomToVolumesMarginFactor = 1.0;
+const double Camera::DefaultZoomToBoxMarginFactor = 1.025;
+const double Camera::DefaultZoomToVolumesMarginFactor = 1.025;
 #endif // ENABLE_THUMBNAIL_GENERATOR
 double Camera::FrustrumMinZRange = 50.0;
 double Camera::FrustrumMinNearZ = 100.0;
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 4e36739ac..f8e7b1f94 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -3594,7 +3594,8 @@ static void debug_output_thumbnail(const ThumbnailData& thumbnail_data)
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
 
-static void render_volumes_in_thumbnail(const GLVolumePtrs& volumes, ThumbnailData& thumbnail_data, bool printable_only, bool parts_only)
+
+static void render_volumes_in_thumbnail(Shader& shader, const GLVolumePtrs& volumes, ThumbnailData& thumbnail_data, bool printable_only, bool parts_only)
 {
     auto is_visible = [](const GLVolume& v) -> bool
     {
@@ -3603,8 +3604,8 @@ static void render_volumes_in_thumbnail(const GLVolumePtrs& volumes, ThumbnailDa
         return ret;
     };
 
-    static const float orange[] = { 0.99f, 0.49f, 0.26f };
-    static const float gray[] = { 0.64f, 0.64f, 0.64f };
+    static const GLfloat orange[] = { 0.923f, 0.504f, 0.264f, 1.0f };
+    static const GLfloat gray[] = { 0.64f, 0.64f, 0.64f, 1.0f };
 
     GLVolumePtrs visible_volumes;
 
@@ -3634,17 +3635,31 @@ static void render_volumes_in_thumbnail(const GLVolumePtrs& volumes, ThumbnailDa
     camera.apply_projection(box);
 
     glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
-    glsafe(::glEnable(GL_LIGHTING));
     glsafe(::glEnable(GL_DEPTH_TEST));
 
+    shader.start_using();
+
+    GLint shader_id = shader.get_shader_program_id();
+    GLint color_id = ::glGetUniformLocation(shader_id, "uniform_color");
+    GLint print_box_detection_id = ::glGetUniformLocation(shader_id, "print_box.volume_detection");
+    glcheck();
+
+    if (print_box_detection_id != -1)
+        glsafe(::glUniform1i(print_box_detection_id, 0));
+
     for (const GLVolume* vol : visible_volumes)
     {
-        glsafe(::glColor3fv((vol->printable && !vol->is_outside) ? orange : gray));
+        if (color_id >= 0)
+            glsafe(::glUniform4fv(color_id, 1, (vol->printable && !vol->is_outside) ? orange : gray));
+        else
+            glsafe(::glColor4fv((vol->printable && !vol->is_outside) ? orange : gray));
+
         vol->render();
     }
 
+    shader.stop_using();
+
     glsafe(::glDisable(GL_DEPTH_TEST));
-    glsafe(::glDisable(GL_LIGHTING));
 }
 
 void GLCanvas3D::_render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
@@ -3700,7 +3715,7 @@ void GLCanvas3D::_render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, un
 
     if (::glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE)
     {
-        render_volumes_in_thumbnail(m_volumes.volumes, thumbnail_data, printable_only, parts_only);
+        render_volumes_in_thumbnail(m_shader, m_volumes.volumes, thumbnail_data, printable_only, parts_only);
 
         if (multisample)
         {
@@ -3768,7 +3783,7 @@ void GLCanvas3D::_render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigne
     if (!thumbnail_data.is_valid())
         return;
 
-    render_volumes_in_thumbnail(m_volumes.volumes, thumbnail_data, printable_only, parts_only);
+    render_volumes_in_thumbnail(m_shader, m_volumes.volumes, thumbnail_data, printable_only, parts_only);
 
     glsafe(::glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
 #if ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
@@ -4302,7 +4317,9 @@ void GLCanvas3D::_render_objects() const
     if (m_volumes.empty())
         return;
 
+#if !ENABLE_THUMBNAIL_GENERATOR
     glsafe(::glEnable(GL_LIGHTING));
+#endif // !ENABLE_THUMBNAIL_GENERATOR
     glsafe(::glEnable(GL_DEPTH_TEST));
 
     m_camera_clipping_plane = m_gizmos.get_sla_clipping_plane();
@@ -4346,7 +4363,9 @@ void GLCanvas3D::_render_objects() const
     m_shader.stop_using();
 
     m_camera_clipping_plane = ClippingPlane::ClipsNothing();
+#if !ENABLE_THUMBNAIL_GENERATOR
     glsafe(::glDisable(GL_LIGHTING));
+#endif // !ENABLE_THUMBNAIL_GENERATOR
 }
 
 void GLCanvas3D::_render_selection() const

From 4c735192ef5d5e58a1d634c90e4398a4eb0b3764 Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Mon, 4 Nov 2019 11:26:36 +0100
Subject: [PATCH 48/84] Bugfixes of the new adaptive elephant foot
 compensation.

---
 src/libslic3r/ClipperUtils.cpp             | 48 +++++++++++++---------
 src/libslic3r/ElephantFootCompensation.cpp |  4 +-
 src/libslic3r/PrintObject.cpp              |  5 ++-
 3 files changed, 34 insertions(+), 23 deletions(-)

diff --git a/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp
index 3db2f1f00..25100b22f 100644
--- a/src/libslic3r/ClipperUtils.cpp
+++ b/src/libslic3r/ClipperUtils.cpp
@@ -951,6 +951,7 @@ ClipperLib::Paths fix_after_inner_offset(const ClipperLib::Path &input, ClipperL
 ClipperLib::Path mittered_offset_path_scaled(const Points &contour, const std::vector<float> &deltas, double miter_limit)
 {
 	assert(contour.size() == deltas.size());
+
 #ifndef NDEBUG
 	// Verify that the deltas are either all positive, or all negative.
 	bool positive = false;
@@ -986,7 +987,10 @@ ClipperLib::Path mittered_offset_path_scaled(const Points &contour, const std::v
 		double lmin  = *std::max_element(deltas.begin(), deltas.end()) * CLIPPER_OFFSET_SHORTEST_EDGE_FACTOR;
 		double l2min = lmin * lmin;
 		// Minimum angle to consider two edges to be parallel.
-		double sin_min_parallel = EPSILON + 1. / double(CLIPPER_OFFSET_SCALE);
+		// Vojtech's estimate.
+//		const double sin_min_parallel = EPSILON + 1. / double(CLIPPER_OFFSET_SCALE);
+		// Implementation equal to Clipper.
+		const double sin_min_parallel = 1.;
 
 		// Find the last point further from pt by l2min.
 		Vec2d  pt     = contour.front().cast<double>();
@@ -1012,8 +1016,12 @@ ClipperLib::Path mittered_offset_path_scaled(const Points &contour, const std::v
 					if (l2 > l2min)
 						break;
 				}
-				if (j > ilast)
+				if (j > ilast) {
+					assert(i <= ilast);
+					// If the last edge is too short, merge it with the previous edge.
+					i = ilast;
 					ptnext = contour.front().cast<double>();
+				}
 
 				// Normal to the (ptnext - pt) segment.
 				Vec2d nnext  = perp(ptnext - pt).normalized();
@@ -1026,27 +1034,29 @@ ClipperLib::Path mittered_offset_path_scaled(const Points &contour, const std::v
 					add_offset_point(pt + nprev * delta);
 					add_offset_point(pt);
 					add_offset_point(pt + nnext * delta);
-				} else if (convex < sin_min_parallel) {
-					// Nearly parallel.
-					add_offset_point((nprev.dot(nnext) > 0.) ? (pt + nprev * delta) : pt);
 				} else {
-					// Convex corner
 					double dot = nprev.dot(nnext);
-					double r = 1. + dot;
-				  	if (r >= miter_limit)
-						add_offset_point(pt + (nprev + nnext) * (delta / r));
-				  	else {
-						double dx = std::tan(std::atan2(sin_a, dot) / 4.);
-						Vec2d  newpt1 = pt + (nprev - perp(nprev) * dx) * delta;
-						Vec2d  newpt2 = pt + (nnext + perp(nnext) * dx) * delta;
+					if (convex < sin_min_parallel && dot > 0.) {
+						// Nearly parallel.
+						add_offset_point((nprev.dot(nnext) > 0.) ? (pt + nprev * delta) : pt);
+					} else {
+						// Convex corner, possibly extremely sharp if convex < sin_min_parallel.
+						double r = 1. + dot;
+					  	if (r >= miter_limit)
+							add_offset_point(pt + (nprev + nnext) * (delta / r));
+					  	else {
+							double dx = std::tan(std::atan2(sin_a, dot) / 4.);
+							Vec2d  newpt1 = pt + (nprev - perp(nprev) * dx) * delta;
+							Vec2d  newpt2 = pt + (nnext + perp(nnext) * dx) * delta;
 #ifndef NDEBUG
-						Vec2d vedge = 0.5 * (newpt1 + newpt2) - pt;
-						double dist_norm = vedge.norm();
-						assert(std::abs(dist_norm - delta) < EPSILON);
+							Vec2d vedge = 0.5 * (newpt1 + newpt2) - pt;
+							double dist_norm = vedge.norm();
+							assert(std::abs(dist_norm - std::abs(delta)) < SCALED_EPSILON);
 #endif /* NDEBUG */
-						add_offset_point(newpt1);
-						add_offset_point(newpt2);
-				  	}
+							add_offset_point(newpt1);
+							add_offset_point(newpt2);
+					  	}
+					}
 				}
 
 				if (i == ilast)
diff --git a/src/libslic3r/ElephantFootCompensation.cpp b/src/libslic3r/ElephantFootCompensation.cpp
index 5bdeaa954..8b3dda8ae 100644
--- a/src/libslic3r/ElephantFootCompensation.cpp
+++ b/src/libslic3r/ElephantFootCompensation.cpp
@@ -88,7 +88,7 @@ std::vector<float> contour_distance(const EdgeGrid::Grid &grid, const size_t idx
 
 						if (std::abs(denom) >= EPSILON) {
 							double t = cross2(dir2, vptpt2) / denom;
-							assert(t > 0. && t <= 1.);
+							assert(t > - EPSILON && t < 1. + EPSILON);
 							bool this_valid = true;
 							if (it_contour_and_segment->first == idx_contour) {
 								// The intersected segment originates from the same contour as the starting point.
@@ -105,7 +105,7 @@ std::vector<float> contour_distance(const EdgeGrid::Grid &grid, const size_t idx
 									auto it = std::lower_bound(resampled_point_parameters.begin(), resampled_point_parameters.end(), key, lower);
 									assert(it != resampled_point_parameters.end() && it->idx_src == ipt && ! it->interpolated);
 									double t2 = cross2(dir, vptpt2) / denom;
-									assert(t2 >= 0. && t2 <= 1.);
+									assert(t2 > - EPSILON && t2 < 1. + EPSILON);
 									if (++ ipt == ipts.size())
 										param_hi = t2 * dir2.norm();
 									else
diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp
index b334b70fc..d717fe872 100644
--- a/src/libslic3r/PrintObject.cpp
+++ b/src/libslic3r/PrintObject.cpp
@@ -1819,11 +1819,12 @@ end:
                     if (delta < 0.f || elephant_foot_compensation > 0.f) {
                         // Apply the negative XY compensation.
                         Polygons trimming;
+                        static const float eps = float(scale_(m_config.slice_closing_radius.value) * 1.5);
                         if (elephant_foot_compensation > 0.f) {
-							trimming = to_polygons(Slic3r::elephant_foot_compensation(offset_ex(layer->merged(float(EPSILON)), std::min(delta, 0.f) - float(EPSILON)), 
+							trimming = to_polygons(Slic3r::elephant_foot_compensation(offset_ex(layer->merged(eps), std::min(delta, 0.f) - eps),
 								layer->m_regions.front()->flow(frExternalPerimeter), unscale<double>(elephant_foot_compensation)));
                         } else
-	                        trimming = offset(layer->merged(float(EPSILON)), delta - float(EPSILON));
+	                        trimming = offset(layer->merged(float(SCALED_EPSILON)), delta - float(SCALED_EPSILON));
                         for (size_t region_id = 0; region_id < layer->m_regions.size(); ++ region_id)
                             layer->m_regions[region_id]->trim_surfaces(trimming);
                     }

From 239957095003735ca9614e413a0d82ac67ddbd03 Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Mon, 4 Nov 2019 11:34:33 +0100
Subject: [PATCH 49/84] Only enable Elphant foot compensation if printing
 directly on the print bed (raft is disabled).

---
 src/libslic3r/PrintObject.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp
index d717fe872..c4ca46a8c 100644
--- a/src/libslic3r/PrintObject.cpp
+++ b/src/libslic3r/PrintObject.cpp
@@ -1772,7 +1772,8 @@ end:
                 float delta = float(scale_(m_config.xy_size_compensation.value));
                 //FIXME only apply the compensation if no raft is enabled.
                 float elephant_foot_compensation = 0.f;
-                if (layer_id == 0)
+                if (layer_id == 0 && m_config.raft_layers == 0)
+                	// Only enable Elephant foot compensation if printing directly on the print bed.
                     elephant_foot_compensation = float(scale_(m_config.elefant_foot_compensation.value));
                 if (layer->m_regions.size() == 1) {
                     // Optimized version for a single region layer.

From 3d450df680eee9a9e5fd786fc3ea436be03f2eff Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Mon, 4 Nov 2019 11:59:23 +0100
Subject: [PATCH 50/84] ENABLE_THUMBNAIL_GENERATOR -> Transparent background
 for thumbnails saved into .3mf

---
 src/slic3r/GUI/GLCanvas3D.cpp | 22 ++++++++++++++--------
 src/slic3r/GUI/GLCanvas3D.hpp |  8 ++++----
 src/slic3r/GUI/Plater.cpp     | 14 +++++++-------
 3 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index f8e7b1f94..7d58f3c09 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1651,12 +1651,12 @@ void GLCanvas3D::render()
 }
 
 #if ENABLE_THUMBNAIL_GENERATOR
-void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
+void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background)
 {
     if (GLCanvas3DManager::are_framebuffers_supported())
-        _render_thumbnail_framebuffer(thumbnail_data, w, h, printable_only, parts_only);
+        _render_thumbnail_framebuffer(thumbnail_data, w, h, printable_only, parts_only, transparent_background);
     else
-        _render_thumbnail_legacy(thumbnail_data, w, h, printable_only, parts_only);
+        _render_thumbnail_legacy(thumbnail_data, w, h, printable_only, parts_only, transparent_background);
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
@@ -3595,7 +3595,7 @@ static void debug_output_thumbnail(const ThumbnailData& thumbnail_data)
 #endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
 
 
-static void render_volumes_in_thumbnail(Shader& shader, const GLVolumePtrs& volumes, ThumbnailData& thumbnail_data, bool printable_only, bool parts_only)
+static void render_volumes_in_thumbnail(Shader& shader, const GLVolumePtrs& volumes, ThumbnailData& thumbnail_data, bool printable_only, bool parts_only, bool transparent_background)
 {
     auto is_visible = [](const GLVolume& v) -> bool
     {
@@ -3634,6 +3634,9 @@ static void render_volumes_in_thumbnail(Shader& shader, const GLVolumePtrs& volu
     camera.apply_view_matrix();
     camera.apply_projection(box);
 
+    if (transparent_background)
+        glsafe(::glClearColor(1.0f, 1.0f, 1.0f, 0.0f));
+
     glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
     glsafe(::glEnable(GL_DEPTH_TEST));
 
@@ -3660,9 +3663,12 @@ static void render_volumes_in_thumbnail(Shader& shader, const GLVolumePtrs& volu
     shader.stop_using();
 
     glsafe(::glDisable(GL_DEPTH_TEST));
+
+    if (transparent_background)
+        glsafe(::glClearColor(1.0f, 1.0f, 1.0f, 1.0f));
 }
 
-void GLCanvas3D::_render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
+void GLCanvas3D::_render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background)
 {
     thumbnail_data.set(w, h);
     if (!thumbnail_data.is_valid())
@@ -3715,7 +3721,7 @@ void GLCanvas3D::_render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, un
 
     if (::glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE)
     {
-        render_volumes_in_thumbnail(m_shader, m_volumes.volumes, thumbnail_data, printable_only, parts_only);
+        render_volumes_in_thumbnail(m_shader, m_volumes.volumes, thumbnail_data, printable_only, parts_only, transparent_background);
 
         if (multisample)
         {
@@ -3766,7 +3772,7 @@ void GLCanvas3D::_render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, un
         glsafe(::glDisable(GL_MULTISAMPLE));
 }
 
-void GLCanvas3D::_render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
+void GLCanvas3D::_render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background)
 {
     // check that thumbnail size does not exceed the default framebuffer size
     const Size& cnv_size = get_canvas_size();
@@ -3783,7 +3789,7 @@ void GLCanvas3D::_render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigne
     if (!thumbnail_data.is_valid())
         return;
 
-    render_volumes_in_thumbnail(m_shader, m_volumes.volumes, thumbnail_data, printable_only, parts_only);
+    render_volumes_in_thumbnail(m_shader, m_volumes.volumes, thumbnail_data, printable_only, parts_only, transparent_background);
 
     glsafe(::glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
 #if ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 850e851fa..9f8d9d228 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -529,7 +529,7 @@ public:
 #if ENABLE_THUMBNAIL_GENERATOR
     // printable_only == false -> render also non printable volumes as grayed
     // parts_only == false -> render also sla support and pad
-    void render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only);
+    void render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background);
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
     void select_all();
@@ -684,9 +684,9 @@ private:
     void _render_undo_redo_stack(const bool is_undo, float pos_x);
 #if ENABLE_THUMBNAIL_GENERATOR
     // render thumbnail using an off-screen framebuffer
-    void _render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only);
-    // render thumbnail using the default framebuffer
-    void _render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only);
+    void _render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background);
+        // render thumbnail using the default framebuffer
+    void _render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background);
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
     void _update_volumes_hover_state() const;
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 464093712..939af1652 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1928,7 +1928,7 @@ struct Plater::priv
     bool can_reload_from_disk() const;
 
 #if ENABLE_THUMBNAIL_GENERATOR
-    void generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, bool printable_only, bool parts_only);
+    void generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background);
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
     void msw_rescale_object_menu();
@@ -3057,7 +3057,7 @@ bool Plater::priv::restart_background_process(unsigned int state)
                 for (const std::pair<unsigned int, unsigned int>& size : THUMBNAIL_SIZE_FFF)
                 {
                     this->thumbnail_data.push_back(ThumbnailData());
-                    generate_thumbnail(this->thumbnail_data.back(), size.first, size.second, true, true);
+                    generate_thumbnail(this->thumbnail_data.back(), size.first, size.second, true, true, false);
                 }
             }
             else if (this->printer_technology == ptSLA)
@@ -3068,7 +3068,7 @@ bool Plater::priv::restart_background_process(unsigned int state)
                 for (const std::pair<unsigned int, unsigned int>& size : THUMBNAIL_SIZE_SLA)
                 {
                     this->thumbnail_data.push_back(ThumbnailData());
-                    generate_thumbnail(this->thumbnail_data.back(), size.first, size.second, true, true);
+                    generate_thumbnail(this->thumbnail_data.back(), size.first, size.second, true, true, false);
                 }
             }
         }
@@ -3422,7 +3422,7 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
             for (const std::pair<unsigned int, unsigned int>& size : THUMBNAIL_SIZE_SLA)
             {
                 this->thumbnail_data.push_back(ThumbnailData());
-                generate_thumbnail(this->thumbnail_data.back(), size.first, size.second, true, false);
+                generate_thumbnail(this->thumbnail_data.back(), size.first, size.second, true, false, false);
             }
         }
 #endif // ENABLE_THUMBNAIL_GENERATOR
@@ -3653,9 +3653,9 @@ bool Plater::priv::init_object_menu()
 }
 
 #if ENABLE_THUMBNAIL_GENERATOR
-void Plater::priv::generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, bool printable_only, bool parts_only)
+void Plater::priv::generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background)
 {
-    view3D->get_canvas3d()->render_thumbnail(data, w, h, printable_only, parts_only);
+    view3D->get_canvas3d()->render_thumbnail(data, w, h, printable_only, parts_only, transparent_background);
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
@@ -4699,7 +4699,7 @@ void Plater::export_3mf(const boost::filesystem::path& output_path)
     wxBusyCursor wait;
 #if ENABLE_THUMBNAIL_GENERATOR
     ThumbnailData thumbnail_data;
-    p->generate_thumbnail(thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, false, true);
+    p->generate_thumbnail(thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, false, true, true);
     if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr, &thumbnail_data)) {
 #else
     if (Slic3r::store_3mf(path_u8.c_str(), &p->model, export_config ? &cfg : nullptr)) {

From 3321ae7f131d3de3427bd370e81b8915add4a26c Mon Sep 17 00:00:00 2001
From: Stephan Reichhelm <stephan@forheaven.de>
Date: Tue, 7 May 2019 19:51:14 +0200
Subject: [PATCH 51/84] + add FlashAir support for host upload

---
 src/libslic3r/PrintConfig.cpp  |   2 +
 src/libslic3r/PrintConfig.hpp  |   3 +-
 src/slic3r/CMakeLists.txt      |   2 +
 src/slic3r/Utils/FlashAir.cpp  | 220 +++++++++++++++++++++++++++++++++
 src/slic3r/Utils/FlashAir.hpp  |  44 +++++++
 src/slic3r/Utils/PrintHost.cpp |   2 +
 6 files changed, 272 insertions(+), 1 deletion(-)
 create mode 100644 src/slic3r/Utils/FlashAir.cpp
 create mode 100644 src/slic3r/Utils/FlashAir.hpp

diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 33105bff3..e639a6734 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -1327,8 +1327,10 @@ void PrintConfigDef::init_fff_params()
     def->enum_keys_map = &ConfigOptionEnum<PrintHostType>::get_enum_values();
     def->enum_values.push_back("octoprint");
     def->enum_values.push_back("duet");
+    def->enum_values.push_back("flashair");
     def->enum_labels.push_back("OctoPrint");
     def->enum_labels.push_back("Duet");
+    def->enum_labels.push_back("FlashAir");
     def->mode = comAdvanced;
     def->set_default_value(new ConfigOptionEnum<PrintHostType>(htOctoPrint));
 
diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp
index 5c287ba93..4b007fc51 100644
--- a/src/libslic3r/PrintConfig.hpp
+++ b/src/libslic3r/PrintConfig.hpp
@@ -30,7 +30,7 @@ enum GCodeFlavor : unsigned char {
 };
 
 enum PrintHostType {
-    htOctoPrint, htDuet
+    htOctoPrint, htDuet, htFlashAir
 };
 
 enum InfillPattern {
@@ -102,6 +102,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<PrintHostType>::g
     if (keys_map.empty()) {
         keys_map["octoprint"]       = htOctoPrint;
         keys_map["duet"]            = htDuet;
+        keys_map["flashair"]        = htFlashAir;
     }
     return keys_map;
 }
diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index 17b76e629..84a60da6e 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -144,6 +144,8 @@ set(SLIC3R_GUI_SOURCES
     Utils/OctoPrint.hpp
     Utils/Duet.cpp
     Utils/Duet.hpp
+    Utils/FlashAir.cpp
+    Utils/FlashAir.hpp
     Utils/PrintHost.cpp
     Utils/PrintHost.hpp
     Utils/Bonjour.cpp
diff --git a/src/slic3r/Utils/FlashAir.cpp b/src/slic3r/Utils/FlashAir.cpp
new file mode 100644
index 000000000..d7b97fc54
--- /dev/null
+++ b/src/slic3r/Utils/FlashAir.cpp
@@ -0,0 +1,220 @@
+#include "FlashAir.hpp"
+
+#include <algorithm>
+#include <ctime>
+#include <boost/filesystem/path.hpp>
+#include <boost/format.hpp>
+#include <boost/log/trivial.hpp>
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/json_parser.hpp>
+
+#include <wx/frame.h>
+#include <wx/event.h>
+#include <wx/progdlg.h>
+#include <wx/sizer.h>
+#include <wx/stattext.h>
+#include <wx/textctrl.h>
+#include <wx/checkbox.h>
+
+#include "libslic3r/PrintConfig.hpp"
+#include "slic3r/GUI/GUI.hpp"
+#include "slic3r/GUI/I18N.hpp"
+#include "slic3r/GUI/MsgDialog.hpp"
+#include "Http.hpp"
+
+namespace fs = boost::filesystem;
+namespace pt = boost::property_tree;
+
+namespace Slic3r {
+
+FlashAir::FlashAir(DynamicPrintConfig *config) :
+	host(config->opt_string("print_host"))
+{}
+
+FlashAir::~FlashAir() {}
+
+const char* FlashAir::get_name() const { return "FlashAir"; }
+
+bool FlashAir::test(wxString &msg) const
+{
+	// Since the request is performed synchronously here,
+	// it is ok to refer to `msg` from within the closure
+
+	const char *name = get_name();
+
+	bool res = false;
+	auto url = make_url("command.cgi", "op", "118");
+
+	BOOST_LOG_TRIVIAL(info) << boost::format("%1%: Get upload enabled at: %2%") % name % url;
+
+	auto http = Http::get(std::move(url));
+	http.on_error([&](std::string body, std::string error, unsigned status) {
+			BOOST_LOG_TRIVIAL(error) << boost::format("%1%: Error getting upload enabled: %2%, HTTP %3%, body: `%4%`") % name % error % status % body;
+			res = false;
+			msg = format_error(body, error, status);
+		})
+		.on_complete([&, this](std::string body, unsigned) {
+			BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: Got upload enabled: %2%") % name % body;
+
+			res = boost::starts_with(body, "1");
+			if (! res) {
+				msg = _(L("Upload not enabled on FlashAir card."));
+			}
+		})
+		.perform_sync();
+
+	return res;
+}
+
+wxString FlashAir::get_test_ok_msg () const
+{
+	return _(L("Connection to FlashAir works correctly and upload is enabled."));
+}
+
+wxString FlashAir::get_test_failed_msg (wxString &msg) const
+{
+	return wxString::Format("%s: %s", _(L("Could not connect to FlashAir")), msg, _(L("Note: FlashAir with firmware 2.00.02 or newer and activated upload function is required."));
+}
+
+bool FlashAir::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn) const
+{
+	const char *name = get_name();
+
+	const auto upload_filename = upload_data.upload_path.filename();
+	const auto upload_parent_path = upload_data.upload_path.parent_path();
+
+	wxString test_msg;
+	if (! test(test_msg)) {
+		error_fn(std::move(test_msg));
+		return false;
+	}
+
+	bool res = false;
+
+	auto urlPrepare = make_url("upload.cgi", "WRITEPROTECT=ON&FTIME", timestamp_str());
+	auto urlUpload = make_url("upload.cgi");
+
+	BOOST_LOG_TRIVIAL(info) << boost::format("%1%: Uploading file %2% at %3% / %4%, filename: %5%")
+		% name
+		% upload_data.source_path
+		% urlPrepare
+		% urlUpload
+		% upload_filename.string();
+
+	// set filetime for upload and make card writeprotect to prevent filesystem damage
+	auto httpPrepare = Http::get(std::move(urlPrepare));
+	httpPrepare.on_error([&](std::string body, std::string error, unsigned status) {
+			BOOST_LOG_TRIVIAL(error) << boost::format("%1%: Error prepareing upload: %2%, HTTP %3%, body: `%4%`") % name % error % status % body;
+			error_fn(format_error(body, error, status));
+			res = false;
+		})
+		.on_complete([&, this](std::string body, unsigned) {
+			BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: Got prepare result: %2%") % name % body;
+			res = boost::icontains(body, "SUCCESS");
+			if (! res) {
+				BOOST_LOG_TRIVIAL(error) << boost::format("%1%: Request completed but no SUCCESS message was received.") % name;
+				error_fn(format_error(body, L("Unknown error occured"), 0));
+			}
+		})
+		.perform_sync();
+	
+	if(! res ) {
+		return res;
+	}
+	
+	// start file upload
+	auto http = Http::post(std::move(urlUpload));
+	http.form_add_file("file", upload_data.source_path.string(), upload_filename.string())
+		.on_complete([&](std::string body, unsigned status) {
+			BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: File uploaded: HTTP %2%: %3%") % name % status % body;
+			res = boost::icontains(body, "SUCCESS");
+			if (! res) {
+				BOOST_LOG_TRIVIAL(error) << boost::format("%1%: Request completed but no SUCCESS message was received.") % name;
+				error_fn(format_error(body, L("Unknown error occured"), 0));
+			}
+		})
+		.on_error([&](std::string body, std::string error, unsigned status) {
+			BOOST_LOG_TRIVIAL(error) << boost::format("%1%: Error uploading file: %2%, HTTP %3%, body: `%4%`") % name % error % status % body;
+			error_fn(format_error(body, error, status));
+			res = false;
+		})
+		.on_progress([&](Http::Progress progress, bool &cancel) {
+			prorgess_fn(std::move(progress), cancel);
+			if (cancel) {
+				// Upload was canceled
+				BOOST_LOG_TRIVIAL(info) << boost::format("%1%: Upload canceled") % name;
+				res = false;
+			}
+		})
+		.perform_sync();
+
+	return res;
+}
+
+bool FlashAir::has_auto_discovery() const
+{
+	return false;
+}
+
+bool FlashAir::can_test() const
+{
+	return true;
+}
+
+bool FlashAir::can_start_print() const
+{
+	return false;
+}
+
+std::string FlashAir::timestamp_str() const
+{
+	auto t = std::time(nullptr);
+	auto tm = *std::localtime(&t);
+
+	const char *name = get_name();
+
+	unsigned long fattime = ((tm.tm_year - 80) << 25) | 
+							((tm.tm_mon + 1) << 21) |
+							(tm.tm_mday << 16) |
+							(tm.tm_hour << 11) |
+							(tm.tm_min << 5) |
+							(tm.tm_sec >> 1);
+
+	return (boost::format("%1$#x") % fattime).str();
+}
+
+std::string FlashAir::make_url(const std::string &path) const
+{
+	if (host.find("http://") == 0 || host.find("https://") == 0) {
+		if (host.back() == '/') {
+			return (boost::format("%1%%2%") % host % path).str();
+		} else {
+			return (boost::format("%1%/%2%") % host % path).str();
+		}
+	} else {
+		if (host.back() == '/') {
+			return (boost::format("http://%1%%2%") % host % path).str();
+		} else {
+			return (boost::format("http://%1%/%2%") % host % path).str();
+		}
+	}
+}
+
+std::string FlashAir::make_url(const std::string &path, const std::string &arg, const std::string &val) const
+{
+	if (host.find("http://") == 0 || host.find("https://") == 0) {
+		if (host.back() == '/') {
+			return (boost::format("%1%%2%?%3%=%4%") % host % path % arg % val).str();
+		} else {
+			return (boost::format("%1%/%2%?%3%=%4%") % host % path % arg % val).str();
+		}
+	} else {
+		if (host.back() == '/') {
+			return (boost::format("http://%1%%2%?%3%=%4%") % host % path % arg % val).str();
+		} else {
+			return (boost::format("http://%1%/%2%?%3%=%4%") % host % path % arg % val).str();
+		}
+	}
+}
+
+}
diff --git a/src/slic3r/Utils/FlashAir.hpp b/src/slic3r/Utils/FlashAir.hpp
new file mode 100644
index 000000000..1499eee5d
--- /dev/null
+++ b/src/slic3r/Utils/FlashAir.hpp
@@ -0,0 +1,44 @@
+#ifndef slic3r_FlashAir_hpp_
+#define slic3r_FlashAir_hpp_
+
+#include <string>
+#include <wx/string.h>
+
+#include "PrintHost.hpp"
+
+
+namespace Slic3r {
+
+
+class DynamicPrintConfig;
+class Http;
+
+class FlashAir : public PrintHost
+{
+public:
+	FlashAir(DynamicPrintConfig *config);
+	virtual ~FlashAir();
+
+	virtual const char* get_name() const;
+
+	virtual bool test(wxString &curl_msg) const;
+	virtual wxString get_test_ok_msg () const;
+	virtual wxString get_test_failed_msg (wxString &msg) const;
+	virtual bool upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn) const;
+	virtual bool has_auto_discovery() const;
+	virtual bool can_test() const;
+	virtual bool can_start_print() const;
+	virtual std::string get_host() const { return host; }
+
+private:
+	std::string host;
+
+	std::string timestamp_str() const;
+	std::string make_url(const std::string &path) const;
+	std::string make_url(const std::string &path, const std::string &arg, const std::string &val) const;
+};
+
+
+}
+
+#endif
diff --git a/src/slic3r/Utils/PrintHost.cpp b/src/slic3r/Utils/PrintHost.cpp
index ab52b2344..59a929ecc 100644
--- a/src/slic3r/Utils/PrintHost.cpp
+++ b/src/slic3r/Utils/PrintHost.cpp
@@ -14,6 +14,7 @@
 #include "libslic3r/Channel.hpp"
 #include "OctoPrint.hpp"
 #include "Duet.hpp"
+#include "FlashAir.hpp"
 #include "../GUI/PrintHostDialogs.hpp"
 
 namespace fs = boost::filesystem;
@@ -43,6 +44,7 @@ PrintHost* PrintHost::get_print_host(DynamicPrintConfig *config)
         switch (host_type) {
             case htOctoPrint: return new OctoPrint(config);
             case htDuet:      return new Duet(config);
+            case htFlashAir:  return new FlashAir(config);
             default:          return nullptr;
         }
     } else {

From 6089cadc4ee42e62ddbbfa7d8c352809dd103208 Mon Sep 17 00:00:00 2001
From: Stephan Reichhelm <stephan@forheaven.de>
Date: Tue, 7 May 2019 19:51:47 +0200
Subject: [PATCH 52/84] + add new flashair class to localization

---
 resources/localization/list.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/resources/localization/list.txt b/resources/localization/list.txt
index 82f109df4..aa2f938b7 100644
--- a/resources/localization/list.txt
+++ b/resources/localization/list.txt
@@ -45,6 +45,7 @@ src/slic3r/GUI/WipeTowerDialog.cpp
 src/slic3r/GUI/wxExtensions.cpp
 src/slic3r/Utils/Duet.cpp
 src/slic3r/Utils/OctoPrint.cpp
+src/slic3r/Utils/FlashAir.cpp
 src/slic3r/Utils/PresetUpdater.cpp
 src/slic3r/Utils/FixModelByWin10.cpp
 src/libslic3r/Zipper.cpp

From c37cdb6585d9624163d980501d55157426910453 Mon Sep 17 00:00:00 2001
From: Stephan <stephan@forheaven.de>
Date: Tue, 7 May 2019 20:30:28 +0200
Subject: [PATCH 53/84] * fix compile error and removed json includes

---
 src/slic3r/Utils/FlashAir.cpp | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/slic3r/Utils/FlashAir.cpp b/src/slic3r/Utils/FlashAir.cpp
index d7b97fc54..2e6a7982d 100644
--- a/src/slic3r/Utils/FlashAir.cpp
+++ b/src/slic3r/Utils/FlashAir.cpp
@@ -5,8 +5,6 @@
 #include <boost/filesystem/path.hpp>
 #include <boost/format.hpp>
 #include <boost/log/trivial.hpp>
-#include <boost/property_tree/ptree.hpp>
-#include <boost/property_tree/json_parser.hpp>
 
 #include <wx/frame.h>
 #include <wx/event.h>
@@ -73,7 +71,7 @@ wxString FlashAir::get_test_ok_msg () const
 
 wxString FlashAir::get_test_failed_msg (wxString &msg) const
 {
-	return wxString::Format("%s: %s", _(L("Could not connect to FlashAir")), msg, _(L("Note: FlashAir with firmware 2.00.02 or newer and activated upload function is required."));
+	return wxString::Format("%s: %s", _(L("Could not connect to FlashAir")), msg, _(L("Note: FlashAir with firmware 2.00.02 or newer and activated upload function is required.")));
 }
 
 bool FlashAir::upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn) const

From 64d5ac0d20b4dc7bb2213bfc33e1631bbd3d3e4d Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Mon, 4 Nov 2019 14:00:26 +0100
Subject: [PATCH 54/84] ENABLE_THUMBNAIL_GENERATOR -> Export thumbnails to
 gcode: max length of gcode lines set to 80 characters

---
 src/libslic3r/GCode.cpp    | 22 ++++++++++++++++++++--
 src/slic3r/GUI/GUI_App.cpp | 18 +++++++++++++++++-
 2 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 481e82da1..df3225f81 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -957,6 +957,8 @@ void GCode::_do_export(Print &print, FILE *file)
     // Write thumbnails using base64 encoding
     if (thumbnail_data != nullptr)
     {
+        const unsigned int max_row_length = 78;
+
         for (const ThumbnailData& data : *thumbnail_data)
         {
             if (data.is_valid())
@@ -966,10 +968,26 @@ void GCode::_do_export(Print &print, FILE *file)
                 size_t row_size = 4 * data.width;
                 for (int r = (int)data.height - 1; r >= 0; --r)
                 {
-                    _write_format(file, "; %s\n", boost::beast::detail::base64_encode((const std::uint8_t*)(data.pixels.data() + r * row_size), row_size).c_str());
+                    std::string encoded = boost::beast::detail::base64_encode((const std::uint8_t*)(data.pixels.data() + r * row_size), row_size);
+                    unsigned int row_count = 0;
+                    while (encoded.length() > max_row_length)
+                    {
+                        if (row_count == 0)
+                            _write_format(file, "; %s\n", encoded.substr(0, max_row_length).c_str());
+                        else
+                            _write_format(file, ";>%s\n", encoded.substr(0, max_row_length).c_str());
+
+                        encoded = encoded.substr(max_row_length);
+                        ++row_count;
+                    }
+
+                    if (row_count == 0)
+                        _write_format(file, "; %s\n", encoded.c_str());
+                    else
+                        _write_format(file, ";>%s\n", encoded.c_str());
                 }
 
-                _write(file, "; thumbnail end\n;\n\n");
+                _write(file, "; thumbnail end\n;\n");
             }
             print.throw_if_canceled();
         }
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index c35985f11..8f0014a05 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -1106,6 +1106,7 @@ void GUI_App::gcode_thumbnails_debug()
 
     boost::nowide::ifstream file(in_filename.c_str());
     std::vector<std::string> rows;
+    std::string row;
     if (file.good())
     {
         while (std::getline(file, gcode_line))
@@ -1121,9 +1122,16 @@ void GUI_App::gcode_thumbnails_debug()
                     width = (unsigned int)::atoi(width_str.c_str());
                     std::string height_str = gcode_line.substr(x_pos + 1);
                     height = (unsigned int)::atoi(height_str.c_str());
+                    row.clear();
                 }
                 else if (reading_image && boost::starts_with(gcode_line, END_MASK))
                 {
+                    if (!row.empty())
+                    {
+                        rows.push_back(row);
+                        row.clear();
+                    }
+
                     if ((unsigned int)rows.size() == height)
                     {
                         std::vector<unsigned char> thumbnail(4 * width * height, 0);
@@ -1160,7 +1168,15 @@ void GUI_App::gcode_thumbnails_debug()
                     rows.clear();
                 }
                 else if (reading_image)
-                    rows.push_back(gcode_line.substr(2));
+                {
+                    if (!row.empty() && (gcode_line[1] == ' '))
+                    {
+                        rows.push_back(row);
+                        row.clear();
+                    }
+
+                    row += gcode_line.substr(2);
+                }
             }
         }
 

From f5bef3707f8d1b2e114b42f032925b255db00448 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Mon, 4 Nov 2019 14:28:18 +0100
Subject: [PATCH 55/84] Added missing include

---
 src/slic3r/Utils/FlashAir.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/slic3r/Utils/FlashAir.cpp b/src/slic3r/Utils/FlashAir.cpp
index 2e6a7982d..3fc913c99 100644
--- a/src/slic3r/Utils/FlashAir.cpp
+++ b/src/slic3r/Utils/FlashAir.cpp
@@ -5,6 +5,7 @@
 #include <boost/filesystem/path.hpp>
 #include <boost/format.hpp>
 #include <boost/log/trivial.hpp>
+#include <boost/algorithm/string/predicate.hpp>
 
 #include <wx/frame.h>
 #include <wx/event.h>

From 76377ee0fe334ad3957556ede6d1a8b84d4ed6e1 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Mon, 4 Nov 2019 15:38:15 +0100
Subject: [PATCH 56/84] ENABLE_THUMBNAIL_GENERATOR -> Export thumbnails to
 gcode as png data in lines with max 80 characters length

---
 src/libslic3r/GCode.cpp        | 41 ++++++++++++++++++++++++++++++----
 src/libslic3r/Technologies.hpp |  1 +
 src/slic3r/GUI/GUI_App.cpp     | 23 ++++++++++++++-----
 3 files changed, 56 insertions(+), 9 deletions(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index df3225f81..6b773f4d3 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -35,6 +35,10 @@
 
 #include <Shiny/Shiny.h>
 
+#if ENABLE_THUMBNAIL_GENERATOR_PNG_TO_GCODE
+#include "miniz_extension.hpp"
+#endif // ENABLE_THUMBNAIL_GENERATOR_PNG_TO_GCODE
+
 #if 0
 // Enable debugging and asserts, even in the release build.
 #define DEBUG
@@ -963,6 +967,31 @@ void GCode::_do_export(Print &print, FILE *file)
         {
             if (data.is_valid())
             {
+#if ENABLE_THUMBNAIL_GENERATOR_PNG_TO_GCODE
+                size_t png_size = 0;
+                void* png_data = tdefl_write_image_to_png_file_in_memory_ex((const void*)data.pixels.data(), data.width, data.height, 4, &png_size, MZ_DEFAULT_LEVEL, 1);
+                if (png_data != nullptr)
+                {
+                    _write_format(file, "\n;\n; thumbnail begin %dx%d\n", data.width, data.height);
+
+                    std::string encoded = boost::beast::detail::base64_encode((const std::uint8_t*)png_data, png_size);
+
+                    unsigned int row_count = 0;
+                    while (encoded.length() > max_row_length)
+                    {
+                        _write_format(file, "; %s\n", encoded.substr(0, max_row_length).c_str());
+                        encoded = encoded.substr(max_row_length);
+                        ++row_count;
+                    }
+
+                    if (encoded.length() > 0)
+                        _write_format(file, "; %s\n", encoded.c_str());
+
+                    _write(file, "; thumbnail end\n;\n");
+
+                    mz_free(png_data);
+                }
+#else
                 _write_format(file, "\n;\n; thumbnail begin %dx%d\n", data.width, data.height);
 
                 size_t row_size = 4 * data.width;
@@ -981,13 +1010,17 @@ void GCode::_do_export(Print &print, FILE *file)
                         ++row_count;
                     }
 
-                    if (row_count == 0)
-                        _write_format(file, "; %s\n", encoded.c_str());
-                    else
-                        _write_format(file, ";>%s\n", encoded.c_str());
+                    if (encoded.length() > 0)
+                    {
+                        if (row_count == 0)
+                            _write_format(file, "; %s\n", encoded.c_str());
+                        else
+                            _write_format(file, ";>%s\n", encoded.c_str());
+                    }
                 }
 
                 _write(file, "; thumbnail end\n;\n");
+#endif // ENABLE_THUMBNAIL_GENERATOR_PNG_TO_GCODE
             }
             print.throw_if_canceled();
         }
diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 4b351adb2..15cbd3827 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -39,5 +39,6 @@
 
 // Enable thumbnail generator
 #define ENABLE_THUMBNAIL_GENERATOR (1 && ENABLE_2_2_0_ALPHA1)
+#define ENABLE_THUMBNAIL_GENERATOR_PNG_TO_GCODE (1 && ENABLE_THUMBNAIL_GENERATOR)
 
 #endif // _technologies_h_
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 8f0014a05..07deff54e 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -1104,14 +1104,14 @@ void GUI_App::gcode_thumbnails_debug()
     std::string in_filename = into_u8(dialog.GetPath());
     std::string out_path = boost::filesystem::path(in_filename).remove_filename().append(L"thumbnail").string();
 
-    boost::nowide::ifstream file(in_filename.c_str());
+    boost::nowide::ifstream in_file(in_filename.c_str());
     std::vector<std::string> rows;
     std::string row;
-    if (file.good())
+    if (in_file.good())
     {
-        while (std::getline(file, gcode_line))
+        while (std::getline(in_file, gcode_line))
         {
-            if (file.good())
+            if (in_file.good())
             {
                 if (boost::starts_with(gcode_line, BEGIN_MASK))
                 {
@@ -1126,6 +1126,16 @@ void GUI_App::gcode_thumbnails_debug()
                 }
                 else if (reading_image && boost::starts_with(gcode_line, END_MASK))
                 {
+#if ENABLE_THUMBNAIL_GENERATOR_PNG_TO_GCODE
+                    std::string out_filename = out_path + std::to_string(width) + "x" + std::to_string(height) + ".png";
+                    boost::nowide::ofstream out_file(out_filename.c_str(), std::ios::binary);
+                    if (out_file.good())
+                    {
+                        std::string decoded = boost::beast::detail::base64_decode(row);
+                        out_file.write(decoded.c_str(), decoded.length());
+                        out_file.close();
+                    }
+#else
                     if (!row.empty())
                     {
                         rows.push_back(row);
@@ -1161,6 +1171,7 @@ void GUI_App::gcode_thumbnails_debug()
 
                         image.SaveFile(out_path + std::to_string(width) + "x" + std::to_string(height) + ".png", wxBITMAP_TYPE_PNG);
                     }
+#endif // ENABLE_THUMBNAIL_GENERATOR_PNG_TO_GCODE
 
                     reading_image = false;
                     width = 0;
@@ -1169,18 +1180,20 @@ void GUI_App::gcode_thumbnails_debug()
                 }
                 else if (reading_image)
                 {
+#if !ENABLE_THUMBNAIL_GENERATOR_PNG_TO_GCODE
                     if (!row.empty() && (gcode_line[1] == ' '))
                     {
                         rows.push_back(row);
                         row.clear();
                     }
+#endif // !ENABLE_THUMBNAIL_GENERATOR_PNG_TO_GCODE
 
                     row += gcode_line.substr(2);
                 }
             }
         }
 
-        file.close();
+        in_file.close();
     }
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR

From b295bc22db89ddd3add28e56022a56a49f3b7c35 Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Tue, 5 Nov 2019 10:45:14 +0100
Subject: [PATCH 57/84] Adaptive elephant foot compensation: Improvement of the
 variable offset regularization.

---
 src/libslic3r/ElephantFootCompensation.cpp    | 91 ++++++++++++++++++-
 .../test_elephant_foot_compensation.cpp       | 84 +++++++++++++++++
 2 files changed, 173 insertions(+), 2 deletions(-)

diff --git a/src/libslic3r/ElephantFootCompensation.cpp b/src/libslic3r/ElephantFootCompensation.cpp
index 8b3dda8ae..3cc3075b8 100644
--- a/src/libslic3r/ElephantFootCompensation.cpp
+++ b/src/libslic3r/ElephantFootCompensation.cpp
@@ -267,6 +267,91 @@ static inline void smooth_compensation(std::vector<float> &compensation, float s
 	}
 }
 
+template<typename INDEX_TYPE, typename CONTAINER>
+static inline INDEX_TYPE prev_idx_cyclic(INDEX_TYPE idx, const CONTAINER &container)
+{
+	if (idx == 0)
+		idx = INDEX_TYPE(container.size());
+	return -- idx;
+}
+
+template<typename INDEX_TYPE, typename CONTAINER>
+static inline INDEX_TYPE next_idx_cyclic(INDEX_TYPE idx, const CONTAINER &container)
+{
+	if (++ idx == INDEX_TYPE(container.size()))
+		idx = 0;
+	return idx;
+}
+
+static inline void smooth_compensation_banded(const Points &contour, float band, std::vector<float> &compensation, float strength, size_t num_iterations)
+{
+	assert(contour.size() == compensation.size());
+	assert(contour.size() > 2);
+	std::vector<float> out(compensation);
+	float dist_min2 = band * band;
+	static constexpr bool use_min = false;
+	for (size_t iter = 0; iter < num_iterations; ++ iter) {
+		for (int i = 0; i < int(compensation.size()); ++ i) {
+			const Vec2f  pthis = contour[i].cast<float>();
+			
+			int		j     = prev_idx_cyclic(i, contour);
+			Vec2f	pprev = contour[j].cast<float>();
+			float	prev  = compensation[j];
+			float	l2    = (pthis - pprev).squaredNorm();
+			if (l2 < dist_min2) {
+				float l = sqrt(l2);
+				int jprev = std::exchange(j, prev_idx_cyclic(j, contour));
+				while (j != i) {
+					const Vec2f pp = contour[j].cast<float>();
+					const float lthis = (pp - pprev).norm();
+					const float lnext = l + lthis;
+					if (lnext > band) {
+						// Interpolate the compensation value.
+						prev = use_min ?
+							std::min(prev, lerp(compensation[jprev], compensation[j], (band - l) / lthis)) :
+							lerp(compensation[jprev], compensation[j], (band - l) / lthis);
+						break;
+					}
+					prev  = use_min ? std::min(prev, compensation[j]) : compensation[j];
+					pprev = pp;
+					l     = lnext;
+					jprev = std::exchange(j, prev_idx_cyclic(j, contour));
+				}
+			}
+
+			j = next_idx_cyclic(i, contour);
+			pprev = contour[j].cast<float>();
+			float next = compensation[j];
+			l2 = (pprev - pthis).squaredNorm();
+			if (l2 < dist_min2) {
+				float l = sqrt(l2);
+				int jprev = std::exchange(j, next_idx_cyclic(j, contour));
+				while (j != i) {
+					const Vec2f pp = contour[j].cast<float>();
+					const float lthis = (pp - pprev).norm();
+					const float lnext = l + lthis;
+					if (lnext > band) {
+						// Interpolate the compensation value.
+						next = use_min ?
+							std::min(next, lerp(compensation[jprev], compensation[j], (band - l) / lthis)) :
+							lerp(compensation[jprev], compensation[j], (band - l) / lthis);
+						break;
+					}
+					next  = use_min ? std::min(next, compensation[j]) : compensation[j];
+					pprev = pp;
+					l     = lnext;
+					jprev = std::exchange(j, next_idx_cyclic(j, contour));
+				}
+			}
+
+			float laplacian = compensation[i] * (1.f - strength) + 0.5f * strength * (prev + next);
+			// Compensations are negative. Only apply the laplacian if it leads to lower compensation.
+			out[i] = std::max(laplacian, compensation[i]);
+		}
+		out.swap(compensation);
+	}
+}
+
 ExPolygon elephant_foot_compensation(const ExPolygon &input_expoly, const Flow &external_perimeter_flow, const double compensation)
 {
 	// The contour shall be wide enough to apply the external perimeter plus compensation on both sides.
@@ -285,10 +370,11 @@ ExPolygon elephant_foot_compensation(const ExPolygon &input_expoly, const Flow &
 	std::vector<std::vector<float>> deltas;
 	deltas.reserve(simplified.holes.size() + 1);
 	ExPolygon resampled(simplified);
+	double resample_interval = scale_(0.5);
 	for (size_t idx_contour = 0; idx_contour <= simplified.holes.size(); ++ idx_contour) {
 		Polygon &poly = (idx_contour == 0) ? resampled.contour : resampled.holes[idx_contour - 1];
 		std::vector<ResampledPoint> resampled_point_parameters;
-		poly.points = resample_polygon(poly.points, scale_(0.5), resampled_point_parameters);
+		poly.points = resample_polygon(poly.points, resample_interval, resampled_point_parameters);
 		std::vector<float> dists = contour_distance(grid, idx_contour, poly.points, resampled_point_parameters, search_radius);
 		for (float &d : dists) {
 //			printf("Point %d, Distance: %lf\n", int(&d - dists.data()), unscale<double>(d));
@@ -301,7 +387,8 @@ ExPolygon elephant_foot_compensation(const ExPolygon &input_expoly, const Flow &
 				d = - (d - float(min_contour_width)) / 2.f;
 			assert(d >= - float(scaled_compensation) && d <= 0.f);
 		}
-		smooth_compensation(dists, 0.4f, 10);
+//		smooth_compensation(dists, 0.4f, 10);
+		smooth_compensation_banded(poly.points, float(0.8 * resample_interval), dists, 0.3f, 3);
 		deltas.emplace_back(dists);
 	}
 
diff --git a/tests/libslic3r/test_elephant_foot_compensation.cpp b/tests/libslic3r/test_elephant_foot_compensation.cpp
index 7aa2a241e..9a7e65264 100644
--- a/tests/libslic3r/test_elephant_foot_compensation.cpp
+++ b/tests/libslic3r/test_elephant_foot_compensation.cpp
@@ -151,6 +151,75 @@ static ExPolygon thin_ring()
 	return out;
 }
 
+static ExPolygon vase_with_fins()
+{
+	ExPolygon out;
+	out.contour.points = {
+		{27431106, 489754}, {27436907, 489850}, {27457500, 489724}, {27457500, 5510510}, {28343327, 5565859}, {28351400, 5566288}, {28389945, 5568336}, {28394790, 5568765}, {28420177, 5571613}, {28901163, 5629918}, 
+		{29903776, 5750412}, {30416384, 2513976}, {30682801, 831878}, {30688548, 795593}, {31507808, 939183}, {31513523, 940185}, {31533883, 943282}, {30775577, 5731079}, {30768824, 5773720}, {30748466, 5902252}, 
+		{31614726, 6095505}, {31622633, 6097191}, {31660382, 6105244}, {31665100, 6106426}, {31689729, 6113210}, {32155671, 6246039}, {33127094, 6521893}, {34139670, 3405493}, {34665944, 1785782}, {34677296, 1750843}, 
+		{35464012, 2020824}, {35469500, 2022707}, {35489124, 2028950}, {33991170, 6639179}, {33977829, 6680238}, {33937615, 6804003}, {34762987, 7130382}, {34770532, 7133285}, {34806557, 7147144}, {34811033, 7149049}, 
+		{34834297, 7159603}, {35273721, 7363683}, {36190026, 7788101}, {37677657, 4868472}, {38450834, 3351031}, {38467513, 3318298}, {39202308, 3708028}, {39207434, 3710747}, {39225840, 3719984}, {37025125, 8039112}, 
+		{37005525, 8077579}, {36946446, 8193529}, {37710592, 8645011}, {37717591, 8649059}, {37751004, 8668383}, {37755126, 8670965}, {37776453, 8685028}, {38178545, 8955338}, {39017176, 9517879}, {40943217, 6866906}, 
+		{41944249, 5489097}, {41965843, 5459376}, {42630625, 5959265}, {42635262, 5962752}, {42651996, 5974755}, {39802725, 9896448}, {39777349, 9931375}, {39700858, 10036656}, {40384973, 10602104}, {40391252, 10607196}, 
+		{40421232, 10631509}, {40424899, 10634704}, {40443764, 10651931}, {40798616, 10981815}, {41538921, 11668622}, {43855948, 9351592}, {45060194, 8147345}, {45086172, 8121368}, {45664563, 8719082}, {45668598, 8723251}, 
+		{45683249, 8737724}, {42255579, 12165422}, {42225051, 12195949}, {42133032, 12287968}, {42720262, 12953467}, {42725667, 12959479}, {42751474, 12988183}, {42754596, 12991912}, {42770534, 13011877}, {43069412, 13393211}, 
+		{43693167, 14187377}, {46344137, 12261333}, {47721948, 11260299}, {47751670, 11238705}, {48229435, 11919543}, {48232767, 11924292}, {48244974, 11940879}, {44323286, 14790155}, {44288359, 14815531}, {44183078, 14892022}, 
+		{44658973, 15641210}, {44663371, 15647994}, {44684370, 15680381}, {44686871, 15684553}, {44699489, 15706766}, {44935035, 16130156}, {45426863, 17012121}, {48346505, 15524481}, {49863946, 14751306}, {49896680, 14734627}, 
+		{50262068, 15481841}, {50264616, 15487053}, {50274078, 15505344}, {45954933, 17706046}, {45916466, 17725646}, {45800515, 17784726}, {46153358, 18599135}, {46156641, 18606523}, {46172315, 18641796}, {46174132, 18646308}, 
+		{46183120, 18670221}, {46349534, 19125250}, {46697342, 20073284}, {49813754, 19060715}, {51433464, 18534440}, {51468404, 18523087}, {51712400, 19318239}, {51714102, 19323786}, {51720585, 19343332}, {47110355, 20841293}, 
+		{47069295, 20854634}, {46945530, 20894847}, {47166614, 21754409}, {47168701, 21762220}, {47178664, 21799510}, {47179753, 21804251}, {47184889, 21829276}, {47278074, 22304738}, {47473309, 23295520}, {50709741, 22782917}, 
+		{52391837, 22516497}, {52428122, 22510750}, {52544737, 23334291}, {52545550, 23340036}, {52548897, 23360356}, {47761090, 24118668}, {47718449, 24125422}, {47589917, 24145780}, {47673812, 25029360}, {47674651, 25037401}, 
+		{47678657, 25075792}, {47678992, 25080644}, {47680151, 25106164}, {47697809, 25590347}, {47735642, 26599468}, {52752230, 26599468}, {52738564, 27431106}, {52738469, 27436907}, {52738595, 27457500}, {47717808, 27457500}, 
+		{47662461, 28343321}, {47662032, 28351394}, {47659983, 28389938}, {47659554, 28394784}, {47656706, 28420171}, {47598401, 28901157}, {47477907, 29903774}, {50714338, 30416378}, {52396434, 30682795}, {52432719, 30688542}, 
+		{52289144, 31507800}, {52288143, 31513515}, {52285046, 31533875}, {47497239, 30775569}, {47454598, 30768816}, {47326067, 30748458}, {47132809, 31614720}, {47131122, 31622626}, {47123069, 31660376}, {47121887, 31665094}, 
+		{47115103, 31689724}, {46982279, 32155664}, {46706424, 33127087}, {49822834, 34139662}, {51442545, 34665936}, {51477485, 34677289}, {51207490, 35464012}, {51205607, 35469500}, {51199363, 35489124}, {46589140, 33991162}, 
+		{46548081, 33977821}, {46424316, 33937607}, {46097945, 34762979}, {46095042, 34770524}, {46081183, 34806549}, {46079278, 34811025}, {46068724, 34834289}, {45864641, 35273715}, {45440218, 36190023}, {48359847, 37677651}, 
+		{49877288, 38450826}, {49910022, 38467505}, {49520291, 39202300}, {49517572, 39207426}, {49508336, 39225832}, {45189199, 37025117}, {45150732, 37005517}, {45034781, 36946438}, {44583309, 37710592}, {44579262, 37717591}, 
+		{44559938, 37751004}, {44557356, 37755126}, {44543292, 37776453}, {44272982, 38178543}, {43710441, 39017170}, {46361413, 40943214}, {47739222, 41944249}, {47768943, 41965843}, {47269053, 42630624}, {47265566, 42635262}, 
+		{47253564, 42651996}, {43331872, 39802717}, {43296945, 39777341}, {43191664, 39700850}, {42626221, 40384973}, {42621129, 40391252}, {42596816, 40421232}, {42593621, 40424899}, {42576394, 40443764}, {42246510, 40798616}, 
+		{41559699, 41538918}, {43876735, 43855948}, {45080983, 45060194}, {45106960, 45086172}, {44509231, 45664571}, {44505061, 45668605}, {44490589, 45683256}, {41062903, 42255578}, {40940357, 42133032}, {40274856, 42720258}, 
+		{40268844, 42725663}, {40240140, 42751470}, {40236411, 42754592}, {40216446, 42770530}, {39835112, 43069407}, {39040953, 43693161}, {40966991, 46344124}, {41968025, 47721932}, {41989619, 47751654}, {41308783, 48229434}, 
+		{41304034, 48232767}, {41287447, 48244973}, {38438168, 44323278}, {38412792, 44288351}, {38336302, 44183071}, {37587122, 44658973}, {37580338, 44663371}, {37547951, 44684370}, {37543779, 44686871}, {37521566, 44699489}, 
+		{37098171, 44935029}, {36216213, 45426864}, {37703841, 48346500}, {38477019, 49863946}, {38493698, 49896680}, {37746484, 50262052}, {37741272, 50264600}, {37722981, 50274062}, {35522285, 45954933}, {35502686, 45916466}, 
+		{35443606, 45800515}, {34629191, 46153350}, {34621803, 46156633}, {34586530, 46172307}, {34582018, 46174124}, {34558105, 46183112}, {34103078, 46349526}, {33155041, 46697341}, {34167619, 49813746}, {34693894, 51433456}, 
+		{34705246, 51468395}, {33910086, 51712399}, {33904540, 51714102}, {33884994, 51720585}, {32387039, 47110355}, {32373698, 47069295}, {32333485, 46945530}, {31473915, 47166622}, {31466104, 47168709}, {31428813, 47178672}, 
+		{31424073, 47179760}, {31399048, 47184897}, {30923586, 47278079}, {29932800, 47473310}, {30445407, 50709741}, {30711827, 52391837}, {30717574, 52428122}, {29894033, 52544729}, {29888288, 52545543}, {29867968, 52548889}, 
+		{29109657, 47761082}, {29102904, 47718441}, {29082546, 47589909}, {28198964, 47673827}, {28190923, 47674666}, {28152532, 47678673}, {28147680, 47679007}, {28122160, 47680166}, {27637977, 47697820}, {26628861, 47735648}, 
+		{26628861, 51012422}, {26628864, 52715485}, {26628864, 52752222}, {25797210, 52738556}, {25791409, 52738461}, {25770816, 52738587}, {25770816, 47717800}, {24884998, 47662453}, {24876924, 47662024}, {24838380, 47659975}, 
+		{24833534, 47659546}, {24808147, 47656698}, {24327161, 47598396}, {23324548, 47477901}, {22811940, 50714338}, {22545523, 52396434}, {22539776, 52432719}, {21720525, 52289129}, {21714811, 52288127}, {21694451, 52285030}, 
+		{22452755, 47497223}, {22459508, 47454583}, {22479866, 47326051}, {21613606, 47132816}, {21605699, 47131129}, {21567950, 47123077}, {21563232, 47121895}, {21538602, 47115110}, {21072662, 46982279}, {20101239, 46706425}, 
+		{19088664, 49822824}, {18562390, 51442538}, {18551037, 51477477}, {17764314, 51207498}, {17758826, 51205614}, {17739202, 51199371}, {19237154, 46589140}, {19250495, 46548081}, {19290709, 46424316}, {18465339, 46097937}, 
+		{18457794, 46095035}, {18421769, 46081175}, {18417293, 46079270}, {18394029, 46068716}, {17954603, 45864634}, {17038299, 45440211}, {15550671, 48359845}, {14777498, 49877288}, {14760820, 49910022}, {14026023, 49520291}, 
+		{14020897, 49517572}, {14002491, 49508335}, {16203201, 45189191}, {16222801, 45150724}, {16281880, 45034773}, {15517740, 44583309}, {15510741, 44579261}, {15477328, 44559938}, {15473206, 44557356}, {15451878, 44543292}, 
+		{15049787, 44272982}, {14211153, 43710440}, {12285115, 46361403}, {11284082, 47739206}, {11262488, 47768928}, {10597703, 47269053}, {10593066, 47265566}, {10576332, 47253563}, {13425609, 43331872}, {13450985, 43296945}, 
+		{13527476, 43191664}, {12843352, 42626213}, {12837073, 42621121}, {12807093, 42596808}, {12803426, 42593613}, {12784561, 42576386}, {12429709, 42246502}, {11689410, 41559693}, {9372373, 43876727}, {8168126, 45080975}, 
+		{8142148, 45106952}, {7563757, 44509222}, {7559722, 44505053}, {7545071, 44490581}, {10972747, 41062911}, {11003274, 41032383}, {11095293, 40940365}, {10508063, 40274848}, {10502658, 40268836}, {10476851, 40240132}, 
+		{10473729, 40236403}, {10457791, 40216438}, {10158911, 39835107}, {9535160, 39040950}, {6884192, 40966991}, {5506386, 41968025}, {5476665, 41989618}, {4998885, 41308775}, {4995553, 41304026}, {4983346, 41287439}, 
+		{8905039, 38438168}, {8939966, 38412792}, {9045247, 38336301}, {8569356, 37587114}, {8564958, 37580330}, {8543959, 37547943}, {8541458, 37543771}, {8528840, 37521558}, {8293293, 37098166}, {7801454, 36216208}, 
+		{4881822, 37703836}, {3364381, 38477011}, {3331647, 38493690}, {2966260, 37746484}, {2963712, 37741272}, {2954250, 37722981}, {7273379, 35522270}, {7311845, 35502670}, {7427796, 35443590}, {7074968, 34629191}, 
+		{7071686, 34621803}, {7056012, 34586530}, {7054194, 34582018}, {7045206, 34558105}, {6878792, 34103076}, {6530980, 33155036}, {3414573, 34167611}, {1794864, 34693885}, {1759924, 34705238}, {1515921, 33910079}, 
+		{1514219, 33904532}, {1507735, 33884986}, {6117964, 32387033}, {6159023, 32373692}, {6282789, 32333479}, {6061704, 31473909}, {6059617, 31466099}, {6049654, 31428807}, {6048565, 31424067}, {6043429, 31399042}, 
+		{5950245, 30923582}, {5755014, 29932799}, {2518579, 30445403}, {836483, 30711821}, {800198, 30717568}, {683591, 29894033}, {682777, 29888288}, {679431, 29867968}, {5467236, 29109657}, {5509877, 29102904}, {5638409, 29082546}, 
+		{5554499, 28198964}, {5553660, 28190923}, {5549653, 28152532}, {5549319, 28147680}, {5548160, 28122159}, {5530507, 27637975}, {5492679, 26628853}, {2215900, 26628853}, {512834, 26628856}, {476096, 26628856}, {489754, 25797218},
+		{489850, 25791417}, {489724, 25770824}, {5510510, 25770824}, {5565867, 24884990}, {5566296, 24876916}, {5568344, 24838372}, {5568773, 24833527}, {5571621, 24808139}, {5629923, 24327156}, {5750418, 23324543}, {2513981, 22811940}, 
+		{831886, 22545523}, {795600, 22539776}, {939191, 21720518}, {940192, 21714803}, {943289, 21694443}, {5731087, 22452754}, {5773728, 22459508}, {5902260, 22479865}, {6095512, 21613598}, {6097199, 21605691}, {6105252, 21567942}, 
+		{6106434, 21563224}, {6113218, 21538594}, {6246044, 21072654}, {6521898, 20101231}, {3405493, 19088662}, {1785783, 18562390}, {1750843, 18551037}, {2020831, 17764306}, {2022714, 17758819}, {2028958, 17739194}, {6639187, 19237147}, 
+		{6680246, 19250488}, {6804011, 19290701}, {7130382, 18465339}, {7133285, 18457794}, {7147144, 18421769}, {7149049, 18417293}, {7159603, 18394029}, {7363683, 17954605}, {7788110, 17038301}, {4868477, 15550669}, {3351039, 14777491}, 
+		{3318305, 14760812}, {3708029, 14026016}, {3710747, 14020890}, {3719984, 14002484}, {8039120, 16203201}, {8077586, 16222801}, {8193537, 16281881}, {8645019, 15517733}, {8649067, 15510734}, {8668391, 15477321}, {8670973, 15473199}, 
+		{8685036, 15451871}, {8955346, 15049780}, {9517887, 14211149}, {6866919, 12285108}, {5489112, 11284075}, {5459391, 11262481}, {5959259, 10597695}, {5962745, 10593058}, {5974747, 10576324}, {9896454, 13425601}, {9931382, 13450977}, 
+		{10036663, 13527468}, {10602111, 12843352}, {10607203, 12837073}, {10631516, 12807093}, {10634711, 12803426}, {10651937, 12784561}, {10981820, 12429709}, {11668626, 11689407}, {8147345, 8168126}, {8121368, 8142148}, {8719089, 7563749},
+		{8723258, 7559715}, {8737731, 7545064}, {12165414, 10972746}, {12195941, 11003274}, {12287960, 11095293}, {12953467, 10508056}, {12959479, 10502650}, {12988183, 10476843}, {12991912, 10473721}, {13011878, 10457783}, {13393211, 10158903},
+		{14187378, 9535150}, {12261338, 6884179}, {11260306, 5506371}, {11238712, 5476650}, {11919550, 4998885}, {11924299, 4995552}, {11940886, 4983346}, {14790161, 8905032}, {14815537, 8939959}, {14892028, 9045240}, {15641210, 8569348}, 
+		{15647994, 8564950}, {15680381, 8543951}, {15684553, 8541450}, {15706766, 8528832}, {16130159, 8293285}, {17012123, 7801449}, {15524489, 4881814}, {14751314, 3364373}, {14734635, 3331640}, {15481841, 2966253}, {15487053, 2963704}, 
+		{15505344, 2954242}, {17706054, 7273386}, {17725654, 7311852}, {17784734, 7427803}, {18599135, 7074961}, {18606523, 7071678}, {18641796, 7056004}, {18646308, 7054187}, {18670222, 7045199}, {19125250, 6878787}, {20073289, 6530975}, 
+		{19060715, 3414573}, {18534440, 1794864}, {18523088, 1759924}, {19318247, 1515921}, {19323794, 1514219}, {19343340, 1507736}, {20841293, 6117964}, {20854634, 6159023}, {20894848, 6282789}, {21754417, 6061696}, {21762228, 6059609}, 
+		{21799518, 6049647}, {21804259, 6048557}, {21829284, 6043421}, {22304743, 5950237}, {23295525, 5755007}, {22782917, 2518572}, {22516497, 836476}, {22510750, 800190}, {23334299, 683591}, {23340043, 682777}, {23360363, 679431}, 
+		{24118676, 5467229}, {24125430, 5509869}, {24145787, 5638402}, {25029368, 5554507}, {25037409, 5553668}, {25075799, 5549661}, {25080652, 5549327}, {25106172, 5548168}, {25590355, 5530509}, {26599476, 5492671}, {26599476, 476096}
+	};
+	return out;
+}
+
 SCENARIO("Elephant foot compensation", "[ElephantFoot]") {
 
 	GIVEN("Large box") {
@@ -293,6 +362,21 @@ SCENARIO("Elephant foot compensation", "[ElephantFoot]") {
 		    SVG::export_expolygons(debug_out_path("elephant_foot_compensation_4.svg").c_str(), 
 				{ { { expoly },             { "gray", "black", "blue", coord_t(scale_(0.02)), 0.5f, "black", coord_t(scale_(0.05)) } },
 				  { { expoly_compensated }, { "gray", "black", "blue", coord_t(scale_(0.02)), 0.5f, "black", coord_t(scale_(0.05)) } } });
+#endif /* TESTS_EXPORT_SVGS */
+            THEN("area of the compensated polygon is smaller") {
+                REQUIRE(expoly_compensated.area() < expoly.area());
+            }
+        }
+	}
+
+	GIVEN("Vase with fins") {
+		ExPolygon expoly = vase_with_fins();
+        WHEN("Compensated") {
+			ExPolygon expoly_compensated = elephant_foot_compensation(expoly, Flow(0.419999987f, 0.2f, 0.4f, false), 0.41f);
+#ifdef TESTS_EXPORT_SVGS
+		    SVG::export_expolygons(debug_out_path("elephant_foot_compensation_vase_with_fins.svg").c_str(), 
+				{ { { expoly },             { "gray", "black", "blue", coord_t(scale_(0.02)), 0.5f, "black", coord_t(scale_(0.05)) } },
+				  { { expoly_compensated }, { "gray", "black", "blue", coord_t(scale_(0.02)), 0.5f, "black", coord_t(scale_(0.05)) } } });
 #endif /* TESTS_EXPORT_SVGS */
             THEN("area of the compensated polygon is smaller") {
                 REQUIRE(expoly_compensated.area() < expoly.area());

From e1c6bd174af77c14953df801f2653bf0b9796b41 Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Tue, 5 Nov 2019 11:14:00 +0100
Subject: [PATCH 58/84] Fixed missing include.

---
 src/libslic3r/ElephantFootCompensation.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/libslic3r/ElephantFootCompensation.cpp b/src/libslic3r/ElephantFootCompensation.cpp
index 3cc3075b8..7cbd05d69 100644
--- a/src/libslic3r/ElephantFootCompensation.cpp
+++ b/src/libslic3r/ElephantFootCompensation.cpp
@@ -11,6 +11,7 @@
 
 #include <cmath>
 #include <cassert>
+#include <utility>
 
 // #define CONTOUR_DISTANCE_DEBUG_SVG
 

From f75c022445384b9fd656db79395edcca6ba242a5 Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Tue, 5 Nov 2019 11:16:55 +0100
Subject: [PATCH 59/84] Reworked pull request Centering model on bed, using bed
 shape from config (if available). #2424 thanks @luketaverne

---
 src/PrusaSlicer.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp
index 6c6f9584f..f708679c1 100644
--- a/src/PrusaSlicer.cpp
+++ b/src/PrusaSlicer.cpp
@@ -167,6 +167,7 @@ int CLI::run(int argc, char **argv)
 //    sla_print_config.apply(m_print_config, true);
 
     // Loop through transform options.
+    bool user_center_specified = false;
     for (auto const &opt_key : m_transforms) {
         if (opt_key == "merge") {
             Model m;
@@ -209,6 +210,7 @@ int CLI::run(int argc, char **argv)
             for (auto &model : m_models)
                 model.duplicate_objects_grid(x, y, (distance > 0) ? distance : 6);  // TODO: this is not the right place for setting a default
         } else if (opt_key == "center") {
+        	user_center_specified = true;
             for (auto &model : m_models) {
                 model.add_default_instances();
                 // this affects instances:
@@ -403,7 +405,9 @@ int CLI::run(int argc, char **argv)
                 if (! m_config.opt_bool("dont_arrange")) {
                     //FIXME make the min_object_distance configurable.
                     model.arrange_objects(fff_print.config().min_object_distance());
-                    model.center_instances_around_point(m_config.option<ConfigOptionPoint>("center")->value);
+                    model.center_instances_around_point((! user_center_specified && m_print_config.has("bed_shape")) ? 
+                    	BoundingBoxf(m_print_config.opt<ConfigOptionPoints>("bed_shape")->values).center() : 
+                    	m_config.option<ConfigOptionPoint>("center")->value);
                 }
                 if (printer_technology == ptFFF) {
                     for (auto* mo : model.objects)

From 612e45e783ee54104f8586b9a30de1104fdbf493 Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Tue, 5 Nov 2019 11:46:05 +0100
Subject: [PATCH 60/84] std::exchange not supported by C++11.

---
 src/libslic3r/ElephantFootCompensation.cpp | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/libslic3r/ElephantFootCompensation.cpp b/src/libslic3r/ElephantFootCompensation.cpp
index 7cbd05d69..0f4eb0135 100644
--- a/src/libslic3r/ElephantFootCompensation.cpp
+++ b/src/libslic3r/ElephantFootCompensation.cpp
@@ -11,7 +11,6 @@
 
 #include <cmath>
 #include <cassert>
-#include <utility>
 
 // #define CONTOUR_DISTANCE_DEBUG_SVG
 
@@ -284,6 +283,14 @@ static inline INDEX_TYPE next_idx_cyclic(INDEX_TYPE idx, const CONTAINER &contai
 	return idx;
 }
 
+template<class T, class U = T>
+static inline T exchange(T& obj, U&& new_value)
+{
+    T old_value = std::move(obj);
+    obj = std::forward<U>(new_value);
+    return old_value;
+}
+
 static inline void smooth_compensation_banded(const Points &contour, float band, std::vector<float> &compensation, float strength, size_t num_iterations)
 {
 	assert(contour.size() == compensation.size());
@@ -301,7 +308,7 @@ static inline void smooth_compensation_banded(const Points &contour, float band,
 			float	l2    = (pthis - pprev).squaredNorm();
 			if (l2 < dist_min2) {
 				float l = sqrt(l2);
-				int jprev = std::exchange(j, prev_idx_cyclic(j, contour));
+				int jprev = exchange(j, prev_idx_cyclic(j, contour));
 				while (j != i) {
 					const Vec2f pp = contour[j].cast<float>();
 					const float lthis = (pp - pprev).norm();
@@ -316,7 +323,7 @@ static inline void smooth_compensation_banded(const Points &contour, float band,
 					prev  = use_min ? std::min(prev, compensation[j]) : compensation[j];
 					pprev = pp;
 					l     = lnext;
-					jprev = std::exchange(j, prev_idx_cyclic(j, contour));
+					jprev = exchange(j, prev_idx_cyclic(j, contour));
 				}
 			}
 
@@ -326,7 +333,7 @@ static inline void smooth_compensation_banded(const Points &contour, float band,
 			l2 = (pprev - pthis).squaredNorm();
 			if (l2 < dist_min2) {
 				float l = sqrt(l2);
-				int jprev = std::exchange(j, next_idx_cyclic(j, contour));
+				int jprev = exchange(j, next_idx_cyclic(j, contour));
 				while (j != i) {
 					const Vec2f pp = contour[j].cast<float>();
 					const float lthis = (pp - pprev).norm();
@@ -341,7 +348,7 @@ static inline void smooth_compensation_banded(const Points &contour, float band,
 					next  = use_min ? std::min(next, compensation[j]) : compensation[j];
 					pprev = pp;
 					l     = lnext;
-					jprev = std::exchange(j, next_idx_cyclic(j, contour));
+					jprev = exchange(j, next_idx_cyclic(j, contour));
 				}
 			}
 

From 41dadfdfcfc1c74ca23169ffc0819a2b12d43321 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 5 Nov 2019 14:50:58 +0100
Subject: [PATCH 61/84] ENABLE_THUMBNAIL_GENERATOR -> Generate thumbnails using
 GLEW_EXT_framebuffer_object on graphic cards supporting it

---
 src/slic3r/GUI/GLCanvas3D.cpp        | 114 ++++++++++++++++++++++++++-
 src/slic3r/GUI/GLCanvas3D.hpp        |   4 +-
 src/slic3r/GUI/GLCanvas3DManager.cpp |  10 ++-
 src/slic3r/GUI/GLCanvas3DManager.hpp |  12 ++-
 4 files changed, 129 insertions(+), 11 deletions(-)

diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 7d58f3c09..99f61e51e 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1653,10 +1653,12 @@ void GLCanvas3D::render()
 #if ENABLE_THUMBNAIL_GENERATOR
 void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background)
 {
-    if (GLCanvas3DManager::are_framebuffers_supported())
-        _render_thumbnail_framebuffer(thumbnail_data, w, h, printable_only, parts_only, transparent_background);
-    else
-        _render_thumbnail_legacy(thumbnail_data, w, h, printable_only, parts_only, transparent_background);
+    switch (GLCanvas3DManager::get_framebuffers_type())
+    {
+    case GLCanvas3DManager::FB_Arb: { _render_thumbnail_framebuffer(thumbnail_data, w, h, printable_only, parts_only, transparent_background); break; }
+    case GLCanvas3DManager::FB_Ext: { _render_thumbnail_framebuffer_ext(thumbnail_data, w, h, printable_only, parts_only, transparent_background); break; }
+    default: { _render_thumbnail_legacy(thumbnail_data, w, h, printable_only, parts_only, transparent_background); break; }
+    }
 }
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
@@ -3772,6 +3774,110 @@ void GLCanvas3D::_render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, un
         glsafe(::glDisable(GL_MULTISAMPLE));
 }
 
+void GLCanvas3D::_render_thumbnail_framebuffer_ext(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background)
+{
+    thumbnail_data.set(w, h);
+    if (!thumbnail_data.is_valid())
+        return;
+
+    bool multisample = m_multisample_allowed;
+    if (multisample)
+        glsafe(::glEnable(GL_MULTISAMPLE));
+
+    GLint max_samples;
+    glsafe(::glGetIntegerv(GL_MAX_SAMPLES_EXT, &max_samples));
+    GLsizei num_samples = max_samples / 2;
+
+    GLuint render_fbo;
+    glsafe(::glGenFramebuffersEXT(1, &render_fbo));
+    glsafe(::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, render_fbo));
+
+    GLuint render_tex = 0;
+    GLuint render_tex_buffer = 0;
+    if (multisample)
+    {
+        // use renderbuffer instead of texture to avoid the need to use glTexImage2DMultisample which is available only since OpenGL 3.2
+        glsafe(::glGenRenderbuffersEXT(1, &render_tex_buffer));
+        glsafe(::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, render_tex_buffer));
+        glsafe(::glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, num_samples, GL_RGBA8, w, h));
+        glsafe(::glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, render_tex_buffer));
+    }
+    else
+    {
+        glsafe(::glGenTextures(1, &render_tex));
+        glsafe(::glBindTexture(GL_TEXTURE_2D, render_tex));
+        glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr));
+        glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
+        glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
+        glsafe(::glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, render_tex, 0));
+    }
+
+    GLuint render_depth;
+    glsafe(::glGenRenderbuffersEXT(1, &render_depth));
+    glsafe(::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, render_depth));
+    if (multisample)
+        glsafe(::glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, num_samples, GL_DEPTH_COMPONENT24, w, h));
+    else
+        glsafe(::glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, w, h));
+
+    glsafe(::glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, render_depth));
+
+    GLenum drawBufs[] = { GL_COLOR_ATTACHMENT0 };
+    glsafe(::glDrawBuffers(1, drawBufs));
+
+    if (::glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE_EXT)
+    {
+        render_volumes_in_thumbnail(m_shader, m_volumes.volumes, thumbnail_data, printable_only, parts_only, transparent_background);
+
+        if (multisample)
+        {
+            GLuint resolve_fbo;
+            glsafe(::glGenFramebuffersEXT(1, &resolve_fbo));
+            glsafe(::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, resolve_fbo));
+
+            GLuint resolve_tex;
+            glsafe(::glGenTextures(1, &resolve_tex));
+            glsafe(::glBindTexture(GL_TEXTURE_2D, resolve_tex));
+            glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr));
+            glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
+            glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
+            glsafe(::glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, resolve_tex, 0));
+
+            glsafe(::glDrawBuffers(1, drawBufs));
+
+            if (::glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE_EXT)
+            {
+                glsafe(::glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, render_fbo));
+                glsafe(::glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, resolve_fbo));
+                glsafe(::glBlitFramebufferEXT(0, 0, w, h, 0, 0, w, h, GL_COLOR_BUFFER_BIT, GL_LINEAR));
+
+                glsafe(::glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, resolve_fbo));
+                glsafe(::glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
+            }
+
+            glsafe(::glDeleteTextures(1, &resolve_tex));
+            glsafe(::glDeleteFramebuffersEXT(1, &resolve_fbo));
+        }
+        else
+            glsafe(::glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, (void*)thumbnail_data.pixels.data()));
+
+#if ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
+        debug_output_thumbnail(thumbnail_data);
+#endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
+    }
+
+    glsafe(::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0));
+    glsafe(::glDeleteRenderbuffersEXT(1, &render_depth));
+    if (render_tex_buffer != 0)
+        glsafe(::glDeleteRenderbuffersEXT(1, &render_tex_buffer));
+    if (render_tex != 0)
+        glsafe(::glDeleteTextures(1, &render_tex));
+    glsafe(::glDeleteFramebuffersEXT(1, &render_fbo));
+
+    if (multisample)
+        glsafe(::glDisable(GL_MULTISAMPLE));
+}
+
 void GLCanvas3D::_render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background)
 {
     // check that thumbnail size does not exceed the default framebuffer size
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 9f8d9d228..8c2e6e9a5 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -685,7 +685,9 @@ private:
 #if ENABLE_THUMBNAIL_GENERATOR
     // render thumbnail using an off-screen framebuffer
     void _render_thumbnail_framebuffer(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background);
-        // render thumbnail using the default framebuffer
+    // render thumbnail using an off-screen framebuffer when GLEW_EXT_framebuffer_object is supported
+    void _render_thumbnail_framebuffer_ext(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background);
+    // render thumbnail using the default framebuffer
     void _render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigned int w, unsigned int h, bool printable_only, bool parts_only, bool transparent_background);
 #endif // ENABLE_THUMBNAIL_GENERATOR
 
diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp
index 03daa0b00..3594e85a4 100644
--- a/src/slic3r/GUI/GLCanvas3DManager.cpp
+++ b/src/slic3r/GUI/GLCanvas3DManager.cpp
@@ -189,7 +189,7 @@ std::string GLCanvas3DManager::GLInfo::to_string(bool format_as_html, bool exten
 
 GLCanvas3DManager::EMultisampleState GLCanvas3DManager::s_multisample = GLCanvas3DManager::MS_Unknown;
 bool GLCanvas3DManager::s_compressed_textures_supported = false;
-bool GLCanvas3DManager::s_framebuffers_supported = false;
+GLCanvas3DManager::EFramebufferType GLCanvas3DManager::s_framebuffers_type = GLCanvas3DManager::FB_None;
 GLCanvas3DManager::GLInfo GLCanvas3DManager::s_gl_info;
 
 GLCanvas3DManager::GLCanvas3DManager()
@@ -270,10 +270,12 @@ void GLCanvas3DManager::init_gl()
         else
             s_compressed_textures_supported = false;
 
-        if (s_gl_info.is_version_greater_or_equal_to(3, 0) && GLEW_ARB_framebuffer_object)
-            s_framebuffers_supported = true;
+        if (GLEW_ARB_framebuffer_object)
+            s_framebuffers_type = FB_Arb;
+        else if (GLEW_EXT_framebuffer_object)
+            s_framebuffers_type = FB_Ext;
         else
-            s_framebuffers_supported = false;
+            s_framebuffers_type = FB_None;
 
         if (! s_gl_info.is_version_greater_or_equal_to(2, 0)) {
         	// Complain about the OpenGL version.
diff --git a/src/slic3r/GUI/GLCanvas3DManager.hpp b/src/slic3r/GUI/GLCanvas3DManager.hpp
index a2e35f811..940e0230a 100644
--- a/src/slic3r/GUI/GLCanvas3DManager.hpp
+++ b/src/slic3r/GUI/GLCanvas3DManager.hpp
@@ -30,6 +30,13 @@ struct Camera;
 class GLCanvas3DManager
 {
 public:
+    enum EFramebufferType : unsigned char
+    {
+        FB_None,
+        FB_Arb,
+        FB_Ext
+    };
+
     class GLInfo
     {
         mutable bool m_detected;
@@ -77,7 +84,7 @@ private:
     bool m_gl_initialized;
     static EMultisampleState s_multisample;
     static bool s_compressed_textures_supported;
-    static bool s_framebuffers_supported;
+    static EFramebufferType s_framebuffers_type;
 
 public:
     GLCanvas3DManager();
@@ -98,7 +105,8 @@ public:
 
     static bool can_multisample() { return s_multisample == MS_Enabled; }
     static bool are_compressed_textures_supported() { return s_compressed_textures_supported; }
-    static bool are_framebuffers_supported() { return s_framebuffers_supported; }
+    static bool are_framebuffers_supported() { return (s_framebuffers_type != FB_None); }
+    static EFramebufferType get_framebuffers_type() { return s_framebuffers_type; }
 
     static wxGLCanvas* create_wxglcanvas(wxWindow *parent);
 

From f8785250d67df5eeea5a26f3db52296e19c0c83d Mon Sep 17 00:00:00 2001
From: Vojtech Kral <vojtech@kral.hk>
Date: Tue, 5 Nov 2019 18:18:27 +0100
Subject: [PATCH 62/84] Disable test_fill.cpp`"Solid surface fill" test for now
 due to precission issues

---
 tests/fff_print/test_fill.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tests/fff_print/test_fill.cpp b/tests/fff_print/test_fill.cpp
index ec8b44a0d..c98cdcf43 100644
--- a/tests/fff_print/test_fill.cpp
+++ b/tests/fff_print/test_fill.cpp
@@ -138,6 +138,8 @@ TEST_CASE("Fill: Pattern Path Length", "[Fill]") {
             REQUIRE(paths.size() == 1);
         }
     }
+
+    #if 0   // Disabled temporarily due to precission issues on the Mac VM
     SECTION("Solid surface fill") {
         Slic3r::Points points {
             Point::new_scale(6883102, 9598327.01296997),
@@ -154,6 +156,8 @@ TEST_CASE("Fill: Pattern Path Length", "[Fill]") {
             REQUIRE(test_if_solid_surface_filled(expolygon, 0.55) == true);
         }
     }
+    #endif
+
     SECTION("Solid surface fill") {
         Slic3r::Points points {
                 Slic3r::Point(59515297,5422499),Slic3r::Point(59531249,5578697),Slic3r::Point(59695801,6123186),

From 1e8aa54559afddf526d86d0c0f58f892209fcf9a Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Thu, 7 Nov 2019 09:01:28 +0100
Subject: [PATCH 63/84] ENABLE_THUMBNAIL_GENERATOR -> Added
 ENABLE_THUMBNAIL_GENERATOR_DEBUG (disabled)

---
 src/libslic3r/Technologies.hpp | 1 +
 src/slic3r/GUI/GUI_App.cpp     | 4 ++--
 src/slic3r/GUI/MainFrame.cpp   | 4 ++--
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp
index 15cbd3827..5d0a7592c 100644
--- a/src/libslic3r/Technologies.hpp
+++ b/src/libslic3r/Technologies.hpp
@@ -39,6 +39,7 @@
 
 // Enable thumbnail generator
 #define ENABLE_THUMBNAIL_GENERATOR (1 && ENABLE_2_2_0_ALPHA1)
+#define ENABLE_THUMBNAIL_GENERATOR_DEBUG (0 && ENABLE_THUMBNAIL_GENERATOR)
 #define ENABLE_THUMBNAIL_GENERATOR_PNG_TO_GCODE (1 && ENABLE_THUMBNAIL_GENERATOR)
 
 #endif // _technologies_h_
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 07deff54e..0b24e2215 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -1087,7 +1087,7 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage
     return res;
 }
 
-#if ENABLE_THUMBNAIL_GENERATOR
+#if ENABLE_THUMBNAIL_GENERATOR_DEBUG
 void GUI_App::gcode_thumbnails_debug()
 {
     const std::string BEGIN_MASK = "; thumbnail begin";
@@ -1196,7 +1196,7 @@ void GUI_App::gcode_thumbnails_debug()
         in_file.close();
     }
 }
-#endif // ENABLE_THUMBNAIL_GENERATOR
+#endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG
 
 void GUI_App::window_pos_save(wxTopLevelWindow* window, const std::string &name)
 {
diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index 56eda2c0d..b76110a87 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -682,11 +682,11 @@ void MainFrame::init_menubar()
         helpMenu->AppendSeparator();
         append_menu_item(helpMenu, wxID_ANY, _(L("Keyboard Shortcuts")) + sep + "&?", _(L("Show the list of the keyboard shortcuts")),
             [this](wxCommandEvent&) { wxGetApp().keyboard_shortcuts(); });
-#if ENABLE_THUMBNAIL_GENERATOR
+#if ENABLE_THUMBNAIL_GENERATOR_DEBUG
         helpMenu->AppendSeparator();
         append_menu_item(helpMenu, wxID_ANY, _(L("DEBUG gcode thumbnails")), _(L("DEBUG ONLY - read the selected gcode file and generates png for the contained thumbnails")),
             [this](wxCommandEvent&) { wxGetApp().gcode_thumbnails_debug(); });
-#endif // ENABLE_THUMBNAIL_GENERATOR
+#endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG
     }
 
     // menubar

From 67f55d3b23c36021f543e74d90d53902a6effed6 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Thu, 7 Nov 2019 12:09:04 +0100
Subject: [PATCH 64/84] Change std::async to boost thread in Plater::priv::Job

---
 src/slic3r/GUI/Plater.cpp | 27 +++++++++++++++------------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index cdd35b720..e2ea9bc1a 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -12,6 +12,7 @@
 #include <boost/filesystem/path.hpp>
 #include <boost/filesystem/operations.hpp>
 #include <boost/log/trivial.hpp>
+#include <boost/thread.hpp>
 
 #include <wx/sizer.h>
 #include <wx/stattext.h>
@@ -1439,7 +1440,7 @@ struct Plater::priv
     class Job : public wxEvtHandler
     {
         int               m_range = 100;
-        std::future<void> m_ftr;
+        boost::thread     m_thread;
         priv *            m_plater = nullptr;
         std::atomic<bool> m_running{false}, m_canceled{false};
         bool              m_finalized = false;
@@ -1480,7 +1481,8 @@ struct Plater::priv
             // Do a full refresh of scene tree, including regenerating
             // all the GLVolumes. FIXME The update function shall just
             // reload the modified matrices.
-            if (!was_canceled()) plater().update((unsigned int)UpdateParams::FORCE_FULL_SCREEN_REFRESH);
+            if (!was_canceled())
+                plater().update(unsigned(UpdateParams::FORCE_FULL_SCREEN_REFRESH));
         }
 
     public:
@@ -1509,9 +1511,9 @@ struct Plater::priv
         }
 
         Job(const Job &) = delete;
-        Job(Job &&)      = default;
+        Job(Job &&)      = delete;
         Job &operator=(const Job &) = delete;
-        Job &operator=(Job &&) = default;
+        Job &operator=(Job &&) = delete;
 
         virtual void process() = 0;
 
@@ -1535,7 +1537,9 @@ struct Plater::priv
                 wxBeginBusyCursor();
 
                 try { // Execute the job
-                    m_ftr = std::async(std::launch::async, &Job::run, this);
+                    boost::thread::attributes attrs;
+                    attrs.set_stack_size((sizeof(void*) == 4) ? (2048 * 1024) : (4096 * 1024));
+                    m_thread = boost::thread(attrs, [this] { this->run(); });
                 } catch (std::exception &) {
                     update_status(status_range(),
                                   _(L("ERROR: not enough resources to "
@@ -1551,16 +1555,15 @@ struct Plater::priv
         // returned if the timeout has been reached and the job is still
         // running. Call cancel() before this fn if you want to explicitly
         // end the job.
-        bool join(int timeout_ms = 0) const
+        bool join(int timeout_ms = 0)
         {
-            if (!m_ftr.valid()) return true;
-
+            if (!m_thread.joinable()) return true;
+            
             if (timeout_ms <= 0)
-                m_ftr.wait();
-            else if (m_ftr.wait_for(std::chrono::milliseconds(
-                         timeout_ms)) == std::future_status::timeout)
+                m_thread.join();
+            else if (!m_thread.try_join_for(boost::chrono::milliseconds(timeout_ms)))
                 return false;
-
+            
             return true;
         }
 

From ad0a38e4190ad022b609f294a54c010185b1f676 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Thu, 7 Nov 2019 12:57:40 +0100
Subject: [PATCH 65/84] Follow up, unify boost::thread usage.

---
 src/slic3r/CMakeLists.txt                   |  1 +
 src/slic3r/GUI/BackgroundSlicingProcess.cpp |  6 +----
 src/slic3r/GUI/BackgroundSlicingProcess.hpp |  2 +-
 src/slic3r/GUI/Plater.cpp                   |  6 ++---
 src/slic3r/Utils/Thread.hpp                 | 28 +++++++++++++++++++++
 5 files changed, 33 insertions(+), 10 deletions(-)
 create mode 100644 src/slic3r/Utils/Thread.hpp

diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt
index 84a60da6e..9ed7424c0 100644
--- a/src/slic3r/CMakeLists.txt
+++ b/src/slic3r/CMakeLists.txt
@@ -156,6 +156,7 @@ set(SLIC3R_GUI_SOURCES
     Utils/UndoRedo.hpp
     Utils/HexFile.cpp
     Utils/HexFile.hpp
+    Utils/Thread.hpp
 )
 
 if (APPLE)
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
index 3f0d87c35..5ab65f340 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -261,11 +261,7 @@ bool BackgroundSlicingProcess::start()
 	if (m_state == STATE_INITIAL) {
 		// The worker thread is not running yet. Start it.
 		assert(! m_thread.joinable());
-		boost::thread::attributes attrs;
-		// Duplicating the stack allocation size of Thread Building Block worker threads of the thread pool:
-		// allocate 4MB on a 64bit system, allocate 2MB on a 32bit system by default.
-		attrs.set_stack_size((sizeof(void*) == 4) ? (2048 * 1024) : (4096 * 1024));
-		m_thread = boost::thread(attrs, [this]{this->thread_proc_safe();});
+		m_thread = create_thread([this]{this->thread_proc_safe();});
 		// Wait until the worker thread is ready to execute the background processing task.
 		m_condition.wait(lck, [this](){ return m_state == STATE_IDLE; });
 	}
diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
index bf8cbc235..a603d52ac 100644
--- a/src/slic3r/GUI/BackgroundSlicingProcess.hpp
+++ b/src/slic3r/GUI/BackgroundSlicingProcess.hpp
@@ -6,12 +6,12 @@
 #include <mutex>
 
 #include <boost/filesystem.hpp>
-#include <boost/thread.hpp>
 
 #include <wx/event.h>
 
 #include "libslic3r/Print.hpp"
 #include "slic3r/Utils/PrintHost.hpp"
+#include "slic3r/Utils/Thread.hpp"
 
 namespace Slic3r {
 
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index e2ea9bc1a..da3a07a59 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -12,7 +12,6 @@
 #include <boost/filesystem/path.hpp>
 #include <boost/filesystem/operations.hpp>
 #include <boost/log/trivial.hpp>
-#include <boost/thread.hpp>
 
 #include <wx/sizer.h>
 #include <wx/stattext.h>
@@ -76,6 +75,7 @@
 #include "../Utils/PrintHost.hpp"
 #include "../Utils/FixModelByWin10.hpp"
 #include "../Utils/UndoRedo.hpp"
+#include "../Utils/Thread.hpp"
 
 #include <wx/glcanvas.h>    // Needs to be last because reasons :-/
 #include "WipeTowerDialog.hpp"
@@ -1537,9 +1537,7 @@ struct Plater::priv
                 wxBeginBusyCursor();
 
                 try { // Execute the job
-                    boost::thread::attributes attrs;
-                    attrs.set_stack_size((sizeof(void*) == 4) ? (2048 * 1024) : (4096 * 1024));
-                    m_thread = boost::thread(attrs, [this] { this->run(); });
+                    m_thread = create_thread([this] { this->run(); });
                 } catch (std::exception &) {
                     update_status(status_range(),
                                   _(L("ERROR: not enough resources to "
diff --git a/src/slic3r/Utils/Thread.hpp b/src/slic3r/Utils/Thread.hpp
new file mode 100644
index 000000000..e9c76d2ab
--- /dev/null
+++ b/src/slic3r/Utils/Thread.hpp
@@ -0,0 +1,28 @@
+#ifndef THREAD_HPP
+#define THREAD_HPP
+
+#include <utility>
+#include <boost/thread.hpp>
+
+namespace Slic3r {
+
+template<class Fn>
+inline boost::thread create_thread(boost::thread::attributes &attrs, Fn &&fn)
+{
+    // Duplicating the stack allocation size of Thread Building Block worker
+    // threads of the thread pool: allocate 4MB on a 64bit system, allocate 2MB
+    // on a 32bit system by default.
+    
+    attrs.set_stack_size((sizeof(void*) == 4) ? (2048 * 1024) : (4096 * 1024));
+    return boost::thread{attrs, std::forward<Fn>(fn)};
+}
+
+template<class Fn> inline boost::thread create_thread(Fn &&fn)
+{
+    boost::thread::attributes attrs;
+    return create_thread(attrs, std::forward<Fn>(fn));    
+}
+
+}
+
+#endif // THREAD_HPP

From 621b8426d3855a9b7c9c998a3d32a1adcb9fd284 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Mon, 11 Nov 2019 11:21:08 +0100
Subject: [PATCH 66/84] #3175 - Fixed compatibility with boost v 1.71

---
 src/libslic3r/GCode.cpp    | 21 +++++++++++++--------
 src/slic3r/GUI/GUI_App.cpp | 14 ++++++++++----
 2 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 63658e817..61849e30d 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -961,7 +961,7 @@ void GCode::_do_export(Print &print, FILE *file)
     // Write thumbnails using base64 encoding
     if (thumbnail_data != nullptr)
     {
-        const unsigned int max_row_length = 78;
+        const size_t max_row_length = 78;
 
         for (const ThumbnailData& data : *thumbnail_data)
         {
@@ -972,19 +972,21 @@ void GCode::_do_export(Print &print, FILE *file)
                 void* png_data = tdefl_write_image_to_png_file_in_memory_ex((const void*)data.pixels.data(), data.width, data.height, 4, &png_size, MZ_DEFAULT_LEVEL, 1);
                 if (png_data != nullptr)
                 {
-                    _write_format(file, "\n;\n; thumbnail begin %dx%d\n", data.width, data.height);
+                    std::string encoded;
+                    encoded.resize(boost::beast::detail::base64::encoded_size(png_size));
+                    encoded.resize(boost::beast::detail::base64::encode((void*)&encoded[0], (const void*)png_data, png_size));
 
-                    std::string encoded = boost::beast::detail::base64_encode((const std::uint8_t*)png_data, png_size);
+                    _write_format(file, "\n;\n; thumbnail begin %dx%d %d\n", data.width, data.height, encoded.size());
 
                     unsigned int row_count = 0;
-                    while (encoded.length() > max_row_length)
+                    while (encoded.size() > max_row_length)
                     {
                         _write_format(file, "; %s\n", encoded.substr(0, max_row_length).c_str());
                         encoded = encoded.substr(max_row_length);
                         ++row_count;
                     }
 
-                    if (encoded.length() > 0)
+                    if (encoded.size() > 0)
                         _write_format(file, "; %s\n", encoded.c_str());
 
                     _write(file, "; thumbnail end\n;\n");
@@ -997,9 +999,12 @@ void GCode::_do_export(Print &print, FILE *file)
                 size_t row_size = 4 * data.width;
                 for (int r = (int)data.height - 1; r >= 0; --r)
                 {
-                    std::string encoded = boost::beast::detail::base64_encode((const std::uint8_t*)(data.pixels.data() + r * row_size), row_size);
+                    std::string encoded;
+                    encoded.resize(boost::beast::detail::base64::encoded_size(row_size));
+                    encoded.resize(boost::beast::detail::base64::encode((void*)&encoded[0], (const void*)(data.pixels.data() + r * row_size), row_size));
+
                     unsigned int row_count = 0;
-                    while (encoded.length() > max_row_length)
+                    while (encoded.size() > max_row_length)
                     {
                         if (row_count == 0)
                             _write_format(file, "; %s\n", encoded.substr(0, max_row_length).c_str());
@@ -1010,7 +1015,7 @@ void GCode::_do_export(Print &print, FILE *file)
                         ++row_count;
                     }
 
-                    if (encoded.length() > 0)
+                    if (encoded.size() > 0)
                     {
                         if (row_count == 0)
                             _write_format(file, "; %s\n", encoded.c_str());
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index 0b24e2215..bcfb9ad39 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -1131,8 +1131,11 @@ void GUI_App::gcode_thumbnails_debug()
                     boost::nowide::ofstream out_file(out_filename.c_str(), std::ios::binary);
                     if (out_file.good())
                     {
-                        std::string decoded = boost::beast::detail::base64_decode(row);
-                        out_file.write(decoded.c_str(), decoded.length());
+                        std::string decoded;
+                        decoded.resize(boost::beast::detail::base64::decoded_size(row.size()));
+                        decoded.resize(boost::beast::detail::base64::decode((void*)&decoded[0], row.data(), row.size()).first);
+
+                        out_file.write(decoded.c_str(), decoded.size());
                         out_file.close();
                     }
 #else
@@ -1147,8 +1150,11 @@ void GUI_App::gcode_thumbnails_debug()
                         std::vector<unsigned char> thumbnail(4 * width * height, 0);
                         for (unsigned int r = 0; r < (unsigned int)rows.size(); ++r)
                         {
-                            std::string decoded_row = boost::beast::detail::base64_decode(rows[r]);
-                            if ((unsigned int)decoded_row.length() == width * 4)
+                            std::string decoded_row;
+                            decoded_row.resize(boost::beast::detail::base64::decoded_size(rows[r].size()));
+                            decoded_row.resize(boost::beast::detail::base64::decode((void*)&decoded_row[0], rows[r].data(), rows[r].size()).first);
+
+                            if ((unsigned int)decoded_row.size() == width * 4)
                             {
                                 void* image_ptr = (void*)(thumbnail.data() + r * width * 4);
                                 ::memcpy(image_ptr, (const void*)decoded_row.c_str(), width * 4);

From bbb4a20dcd12f109ac692a569d9762bb8e372ac1 Mon Sep 17 00:00:00 2001
From: Vojtech Kral <vojtech@kral.hk>
Date: Mon, 11 Nov 2019 12:08:04 +0100
Subject: [PATCH 67/84] Disable Dark Mode on Mac OS for now in the Info.plist

wxWidgets upgrade (or backport) is required first
---
 src/platform/osx/Info.plist.in | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/platform/osx/Info.plist.in b/src/platform/osx/Info.plist.in
index f4e298180..d09f015b9 100644
--- a/src/platform/osx/Info.plist.in
+++ b/src/platform/osx/Info.plist.in
@@ -116,5 +116,7 @@
     <string>NSApplication</string>
     <key>NSHighResolutionCapable</key>
     <true/>
+    <key>NSRequiresAquaSystemAppearance</key>
+    <true/>
   </dict>
 </plist>

From f5971316045bb0777ba2ee5482130c9209d165dd Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Mon, 11 Nov 2019 15:16:20 +0100
Subject: [PATCH 68/84] Trying to disable dark mode when compiled against the
 latest OSX SDK as we are not yet ready for that.

---
 src/platform/osx/Info.plist.in | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/platform/osx/Info.plist.in b/src/platform/osx/Info.plist.in
index f4e298180..d09f015b9 100644
--- a/src/platform/osx/Info.plist.in
+++ b/src/platform/osx/Info.plist.in
@@ -116,5 +116,7 @@
     <string>NSApplication</string>
     <key>NSHighResolutionCapable</key>
     <true/>
+    <key>NSRequiresAquaSystemAppearance</key>
+    <true/>
   </dict>
 </plist>

From 7a24f87c7f514d132c8b1e4d06ab2e13cc11991d Mon Sep 17 00:00:00 2001
From: Vojtech Kral <vojtech@kral.hk>
Date: Mon, 11 Nov 2019 15:44:12 +0100
Subject: [PATCH 69/84] Fix deps build on Mac

Fix #2264
---
 deps/deps-macos.cmake       | 6 ++----
 deps/deps-unix-common.cmake | 2 +-
 deps/deps-windows.cmake     | 1 -
 3 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/deps/deps-macos.cmake b/deps/deps-macos.cmake
index fc08c6290..9e51735fd 100644
--- a/deps/deps-macos.cmake
+++ b/deps/deps-macos.cmake
@@ -16,8 +16,8 @@ include("deps-unix-common.cmake")
 
 ExternalProject_Add(dep_boost
     EXCLUDE_FROM_ALL 1
-    URL "https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.gz"
-    URL_HASH SHA256=96b34f7468f26a141f6020efb813f1a2f3dfb9797ecf76a7d7cbd843cc95f5bd
+    URL "https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.gz"
+    URL_HASH SHA256=882b48708d211a5f48e60b0124cf5863c1534cd544ecd0664bb534a4b5d506e9
     BUILD_IN_SOURCE 1
     CONFIGURE_COMMAND ./bootstrap.sh
         --with-toolset=clang
@@ -90,8 +90,6 @@ ExternalProject_Add(dep_wxwidgets
     EXCLUDE_FROM_ALL 1
     GIT_REPOSITORY "https://github.com/prusa3d/wxWidgets"
     GIT_TAG v3.1.1-patched
-#    URL "https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.2/wxWidgets-3.1.2.tar.bz2"
-#    URL_HASH SHA256=4cb8d23d70f9261debf7d6cfeca667fc0a7d2b6565adb8f1c484f9b674f1f27a
     BUILD_IN_SOURCE 1
 #    PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/wxwidgets-pngprefix.h" src/png/pngprefix.h
     CONFIGURE_COMMAND env "CXXFLAGS=${DEP_WERRORS_SDK}" "CFLAGS=${DEP_WERRORS_SDK}" ./configure
diff --git a/deps/deps-unix-common.cmake b/deps/deps-unix-common.cmake
index eae319efc..74582f601 100644
--- a/deps/deps-unix-common.cmake
+++ b/deps/deps-unix-common.cmake
@@ -62,7 +62,7 @@ ExternalProject_Add(dep_qhull
         -DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr/local
         ${DEP_CMAKE_OPTS}
     UPDATE_COMMAND ""
-    PATCH_COMMAND ${GIT_EXECUTABLE} apply --whitespace=fix ${CMAKE_CURRENT_SOURCE_DIR}/qhull-mods.patch
+    PATCH_COMMAND patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/qhull-mods.patch
 )
 
 ExternalProject_Add(dep_blosc
diff --git a/deps/deps-windows.cmake b/deps/deps-windows.cmake
index 514a90a9e..4aae07d4a 100644
--- a/deps/deps-windows.cmake
+++ b/deps/deps-windows.cmake
@@ -227,7 +227,6 @@ ExternalProject_Add(dep_qhull
         -DCMAKE_POSITION_INDEPENDENT_CODE=ON
         -DCMAKE_DEBUG_POSTFIX=d
     UPDATE_COMMAND ""
-    PATCH_COMMAND ${GIT_EXECUTABLE} apply --whitespace=fix ${CMAKE_CURRENT_SOURCE_DIR}/qhull-mods.patch
     BUILD_COMMAND msbuild /m /P:Configuration=Release INSTALL.vcxproj
     INSTALL_COMMAND ""
 )

From e12512dec0c4ab141e41d0d62da7a2834fb578b6 Mon Sep 17 00:00:00 2001
From: Vojtech Kral <vojtech@kral.hk>
Date: Mon, 11 Nov 2019 17:10:29 +0100
Subject: [PATCH 70/84] Fix: Rename DPI changed event to not clash with impl in
 wxwidgets

---
 src/slic3r/GUI/GUI_App.cpp   | 2 +-
 src/slic3r/GUI/GUI_Utils.cpp | 2 +-
 src/slic3r/GUI/GUI_Utils.hpp | 4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index bcfb9ad39..7d37baa66 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -105,7 +105,7 @@ static void register_dpi_event()
         const auto rect = reinterpret_cast<PRECT>(lParam);
         const wxRect wxrect(wxPoint(rect->top, rect->left), wxPoint(rect->bottom, rect->right));
 
-        DpiChangedEvent evt(EVT_DPI_CHANGED, dpi, wxrect);
+        DpiChangedEvent evt(EVT_DPI_CHANGED_SLICER, dpi, wxrect);
         win->GetEventHandler()->AddPendingEvent(evt);
 
         return true;
diff --git a/src/slic3r/GUI/GUI_Utils.cpp b/src/slic3r/GUI/GUI_Utils.cpp
index d5753f2cc..5090382ce 100644
--- a/src/slic3r/GUI/GUI_Utils.cpp
+++ b/src/slic3r/GUI/GUI_Utils.cpp
@@ -55,7 +55,7 @@ void on_window_geometry(wxTopLevelWindow *tlw, std::function<void()> callback)
 #endif
 }
 
-wxDEFINE_EVENT(EVT_DPI_CHANGED, DpiChangedEvent);
+wxDEFINE_EVENT(EVT_DPI_CHANGED_SLICER, DpiChangedEvent);
 
 #ifdef _WIN32
 template<class F> typename F::FN winapi_get_function(const wchar_t *dll, const char *fn_name) {
diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp
index c47714e46..f7bebd577 100644
--- a/src/slic3r/GUI/GUI_Utils.hpp
+++ b/src/slic3r/GUI/GUI_Utils.hpp
@@ -50,7 +50,7 @@ struct DpiChangedEvent : public wxEvent {
     }
 };
 
-wxDECLARE_EVENT(EVT_DPI_CHANGED, DpiChangedEvent);
+wxDECLARE_EVENT(EVT_DPI_CHANGED_SLICER, DpiChangedEvent);
 
 template<class P> class DPIAware : public P
 {
@@ -75,7 +75,7 @@ public:
 
 //        recalc_font();
 
-        this->Bind(EVT_DPI_CHANGED, [this](const DpiChangedEvent &evt) {
+        this->Bind(EVT_DPI_CHANGED_SLICER, [this](const DpiChangedEvent &evt) {
             m_scale_factor = (float)evt.dpi / (float)DPI_DEFAULT;
 
             m_new_font_point_size = get_default_font_for_dpi(evt.dpi).GetPointSize();

From 316832b23d6ac8347613896d7be73c77ebd35910 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 12 Nov 2019 09:14:42 +0100
Subject: [PATCH 71/84] Fixed out of printbed detection for non-printable
 objects leading to inconsistent volumes' color

---
 src/slic3r/GUI/3DScene.cpp    | 12 ++++++------
 src/slic3r/GUI/GLCanvas3D.cpp | 15 +--------------
 2 files changed, 7 insertions(+), 20 deletions(-)

diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp
index 086ba7a74..bbfcabd36 100644
--- a/src/slic3r/GUI/3DScene.cpp
+++ b/src/slic3r/GUI/3DScene.cpp
@@ -707,24 +707,24 @@ bool GLVolumeCollection::check_outside_state(const DynamicPrintConfig* config, M
     print_volume.min(2) = -1e10;
 
     ModelInstance::EPrintVolumeState state = ModelInstance::PVS_Inside;
-    bool all_contained = true;
 
     bool contained_min_one = false;
 
     for (GLVolume* volume : this->volumes)
     {
-        if ((volume == nullptr) || !volume->printable || volume->is_modifier || (volume->is_wipe_tower && !volume->shader_outside_printer_detection_enabled) || ((volume->composite_id.volume_id < 0) && !volume->shader_outside_printer_detection_enabled))
+        if ((volume == nullptr) || volume->is_modifier || (volume->is_wipe_tower && !volume->shader_outside_printer_detection_enabled) || ((volume->composite_id.volume_id < 0) && !volume->shader_outside_printer_detection_enabled))
             continue;
 
         const BoundingBoxf3& bb = volume->transformed_convex_hull_bounding_box();
         bool contained = print_volume.contains(bb);
-        all_contained &= contained;
+
+        volume->is_outside = !contained;
+        if (!volume->printable)
+            continue;
 
         if (contained)
             contained_min_one = true;
 
-        volume->is_outside = !contained;
-
         if ((state == ModelInstance::PVS_Inside) && volume->is_outside)
             state = ModelInstance::PVS_Fully_Outside;
 
@@ -735,7 +735,7 @@ bool GLVolumeCollection::check_outside_state(const DynamicPrintConfig* config, M
     if (out_state != nullptr)
         *out_state = state;
 
-    return /*all_contained*/ contained_min_one; // #ys_FIXME_delete_after_testing
+    return contained_min_one;
 }
 
 void GLVolumeCollection::reset_outside_state()
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 99f61e51e..e4a5f590d 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2090,20 +2090,6 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
 
         post_event(Event<bool>(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, 
                                contained_min_one && !m_model->objects.empty() && state != ModelInstance::PVS_Partly_Outside));
-
-// #ys_FIXME_delete_after_testing
-//         bool contained = m_volumes.check_outside_state(m_config, &state);
-//         if (!contained)
-//         {
-//             _set_warning_texture(WarningTexture::ObjectOutside, true);
-//             post_event(Event<bool>(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, state == ModelInstance::PVS_Fully_Outside));
-//         }
-//         else
-//         {
-//             m_volumes.reset_outside_state();
-//             _set_warning_texture(WarningTexture::ObjectOutside, false);
-//             post_event(Event<bool>(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, !m_model->objects.empty()));
-//         }
     }
     else
     {
@@ -2887,6 +2873,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
                     volume_bbox.offset(1.0);
                     if (volume_bbox.contains(m_mouse.scene_position))
                     {
+                        m_volumes.volumes[volume_idx]->hover = GLVolume::HS_None;
                         // The dragging operation is initiated.
                         m_mouse.drag.move_volume_idx = volume_idx;
                         m_selection.start_dragging();

From cc919c68b849a0b474f8b609ffe19f15dfbfbd88 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 12 Nov 2019 11:59:33 +0100
Subject: [PATCH 72/84] Use Linux-style paths when saving custom bed texture
 and model files into config

---
 src/slic3r/GUI/3DBed.cpp          |  2 ++
 src/slic3r/GUI/BedShapeDialog.cpp | 32 +++++++++++++++++++++++++++++--
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp
index 4185b6664..82b512270 100644
--- a/src/slic3r/GUI/3DBed.cpp
+++ b/src/slic3r/GUI/3DBed.cpp
@@ -204,6 +204,7 @@ bool Bed3D::set_shape(const Pointfs& shape, const std::string& custom_texture, c
     std::string cst_texture(custom_texture);
     if (!cst_texture.empty())
     {
+        std::replace(cst_texture.begin(), cst_texture.end(), '\\', '/');
         if ((!boost::algorithm::iends_with(custom_texture, ".png") && !boost::algorithm::iends_with(custom_texture, ".svg")) || !boost::filesystem::exists(custom_texture))
             cst_texture = "";
     }
@@ -212,6 +213,7 @@ bool Bed3D::set_shape(const Pointfs& shape, const std::string& custom_texture, c
     std::string cst_model(custom_model);
     if (!cst_model.empty())
     {
+        std::replace(cst_model.begin(), cst_model.end(), '\\', '/');
         if (!boost::algorithm::iends_with(custom_model, ".stl") || !boost::filesystem::exists(custom_model))
             cst_model = "";
     }
diff --git a/src/slic3r/GUI/BedShapeDialog.cpp b/src/slic3r/GUI/BedShapeDialog.cpp
index 5624ada9d..e83904a91 100644
--- a/src/slic3r/GUI/BedShapeDialog.cpp
+++ b/src/slic3r/GUI/BedShapeDialog.cpp
@@ -60,7 +60,9 @@ void BedShapePanel::build_panel(const ConfigOptionPoints& default_pt, const Conf
 {
     m_shape = default_pt.values;
     m_custom_texture = custom_texture.value.empty() ? NONE : custom_texture.value;
+    std::replace(m_custom_texture.begin(), m_custom_texture.end(), '\\', '/');
     m_custom_model = custom_model.value.empty() ? NONE : custom_model.value;
+    std::replace(m_custom_model.begin(), m_custom_model.end(), '\\', '/');
 
     auto sbsizer = new wxStaticBoxSizer(wxVERTICAL, this, _(L("Shape")));
     sbsizer->GetStaticBox()->SetFont(wxGetApp().bold_font());
@@ -212,7 +214,18 @@ wxPanel* BedShapePanel::init_texture_panel()
                 wxStaticText* lbl = dynamic_cast<wxStaticText*>(e.GetEventObject());
                 if (lbl != nullptr)
                 {
-                    wxString tooltip_text = (m_custom_texture == NONE) ? "" : _(m_custom_texture);
+                    bool exists = (m_custom_texture == NONE) || boost::filesystem::exists(m_custom_texture);
+                    lbl->SetForegroundColour(exists ? wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT) : wxColor(*wxRED));
+
+                    wxString tooltip_text = "";
+                    if (m_custom_texture != NONE)
+                    {
+                        if (!exists)
+                            tooltip_text += _(L("Not found: "));
+
+                        tooltip_text += _(m_custom_texture);
+                    }
+
                     wxToolTip* tooltip = lbl->GetToolTip();
                     if ((tooltip == nullptr) || (tooltip->GetTip() != tooltip_text))
                         lbl->SetToolTip(tooltip_text);
@@ -280,7 +293,18 @@ wxPanel* BedShapePanel::init_model_panel()
                 wxStaticText* lbl = dynamic_cast<wxStaticText*>(e.GetEventObject());
                 if (lbl != nullptr)
                 {
-                    wxString tooltip_text = (m_custom_model == NONE) ? "" : _(m_custom_model);
+                    bool exists = (m_custom_model == NONE) || boost::filesystem::exists(m_custom_model);
+                    lbl->SetForegroundColour(exists ? wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT) : wxColor(*wxRED));
+
+                    wxString tooltip_text = "";
+                    if (m_custom_model != NONE)
+                    {
+                        if (!exists)
+                            tooltip_text += _(L("Not found: "));
+
+                        tooltip_text += _(m_custom_model);
+                    }
+
                     wxToolTip* tooltip = lbl->GetToolTip();
                     if ((tooltip == nullptr) || (tooltip->GetTip() != tooltip_text))
                         lbl->SetToolTip(tooltip_text);
@@ -521,6 +545,8 @@ void BedShapePanel::load_texture()
         return;
     }
 
+    std::replace(file_name.begin(), file_name.end(), '\\', '/');
+
     wxBusyCursor wait;
 
     m_custom_texture = file_name;
@@ -544,6 +570,8 @@ void BedShapePanel::load_model()
         return;
     }
 
+    std::replace(file_name.begin(), file_name.end(), '\\', '/');
+
     wxBusyCursor wait;
 
     m_custom_model = file_name;

From 46601f7e1e45262cb967df0ecc73f6c54eeeaff3 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 12 Nov 2019 12:05:13 +0100
Subject: [PATCH 73/84] Added missing boost libraries into CMakeLists.txt

---
 CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b6d40a034..633ab3f19 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -256,7 +256,7 @@ if(NOT WIN32)
     # boost::process was introduced first in version 1.64.0
     set(MINIMUM_BOOST_VERSION "1.64.0")
 endif()
-set(_boost_components "system;filesystem;thread;log;locale;regex")
+set(_boost_components "system;filesystem;thread;log;locale;regex;chrono;atomic;date_time")
 find_package(Boost ${MINIMUM_BOOST_VERSION} REQUIRED COMPONENTS ${_boost_components})
 
 add_library(boost_libs INTERFACE)

From 01d2728060a9c3be76c3eed0fd414ea21c49c821 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 12 Nov 2019 12:29:31 +0100
Subject: [PATCH 74/84] Added missing include

---
 src/slic3r/GUI/BedShapeDialog.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/slic3r/GUI/BedShapeDialog.cpp b/src/slic3r/GUI/BedShapeDialog.cpp
index e83904a91..96a0a59cd 100644
--- a/src/slic3r/GUI/BedShapeDialog.cpp
+++ b/src/slic3r/GUI/BedShapeDialog.cpp
@@ -12,6 +12,7 @@
 
 #include "boost/nowide/iostream.hpp"
 #include <boost/algorithm/string/predicate.hpp>
+#include <boost/filesystem.hpp>
 
 #include <algorithm>
 

From 0c4507141a6b15968ec3a40af035d28eb0110db4 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Tue, 12 Nov 2019 13:19:17 +0100
Subject: [PATCH 75/84] Attempt to fix Mac build on buildserver

---
 src/libslic3r/Fill/FillGyroid.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index e7b4706ac..426734a67 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -145,6 +145,9 @@ static Polylines make_gyroid_waves(double gridZ, double density_adjusted, double
     return result;
 }
 
+// FIXME: needed to fix build on Mac on buildserver
+constexpr double FillGyroid::PatternTolerance;
+
 void FillGyroid::_fill_surface_single(
     const FillParams                &params, 
     unsigned int                     thickness_layers,

From 050a9adf36bb85220f3e3bdee59c399bf495c85a Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Tue, 12 Nov 2019 13:54:36 +0100
Subject: [PATCH 76/84] OSX issue: Fix Background drawing for some of controls
 in Dark mode

---
 src/slic3r/GUI/Field.cpp                  | 16 +++++++++++-----
 src/slic3r/GUI/GUI_ObjectManipulation.cpp |  2 +-
 src/slic3r/GUI/OptionsGroup.hpp           |  2 +-
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index 42e3448fc..a8953f166 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -11,6 +11,12 @@
 #include <wx/tooltip.h>
 #include <boost/algorithm/string/predicate.hpp>
 
+#ifdef __WXOSX__
+#define wxOSX true
+#else
+#define wxOSX false
+#endif
+
 namespace Slic3r { namespace GUI {
 
 wxString double_to_string(double const value, const int max_precision /*= 4*/)
@@ -304,7 +310,7 @@ void TextCtrl::BUILD() {
 	auto temp = new wxTextCtrl(m_parent, wxID_ANY, text_value, wxDefaultPosition, size, style);
 	temp->SetFont(Slic3r::GUI::wxGetApp().normal_font());
 
-	if (! m_opt.multiline)
+    if (! m_opt.multiline && !wxOSX)
 		// Only disable background refresh for single line input fields, as they are completely painted over by the edit control.
 		// This does not apply to the multi-line edit field, where the last line and a narrow frame around the text is not cleared.
 		temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
@@ -491,7 +497,7 @@ void CheckBox::BUILD() {
 	// Set Label as a string of at least one space simbol to correct system scaling of a CheckBox 
 	auto temp = new wxCheckBox(m_parent, wxID_ANY, wxString(" "), wxDefaultPosition, size); 
 	temp->SetFont(Slic3r::GUI::wxGetApp().normal_font());
-	temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
+	if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
 	temp->SetValue(check_value);
 	if (m_opt.readonly) temp->Disable();
 
@@ -601,7 +607,7 @@ void SpinCtrl::BUILD() {
 	auto temp = new wxSpinCtrl(m_parent, wxID_ANY, text_value, wxDefaultPosition, size,
 		0|wxTE_PROCESS_ENTER, min_val, max_val, default_value);
 	temp->SetFont(Slic3r::GUI::wxGetApp().normal_font());
-	temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
+    if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
 
 // XXX: On OS X the wxSpinCtrl widget is made up of two subwidgets, unfortunatelly
 // the kill focus event is not propagated to the encompassing widget,
@@ -717,7 +723,7 @@ void Choice::BUILD() {
     }
 
 	temp->SetFont(Slic3r::GUI::wxGetApp().normal_font());
-	temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
+    if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
 
 	// recast as a wxWindow to fit the calling convention
 	window = dynamic_cast<wxWindow*>(temp);
@@ -1072,7 +1078,7 @@ void ColourPicker::BUILD()
 
 	auto temp = new wxColourPickerCtrl(m_parent, wxID_ANY, clr, wxDefaultPosition, size);
     temp->SetFont(Slic3r::GUI::wxGetApp().normal_font());
-	temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
+    if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
 
 	// 	// recast as a wxWindow to fit the calling convention
 	window = dynamic_cast<wxWindow*>(temp);
diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp
index 4ecab8a0f..937e3dbdc 100644
--- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp
+++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp
@@ -57,7 +57,7 @@ static wxBitmapComboBox* create_word_local_combo(wxWindow *parent)
 #endif //__WXOSX__
 
     temp->SetFont(Slic3r::GUI::wxGetApp().normal_font());
-    temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
+    if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
 
     temp->Append(_(L("World coordinates")));
     temp->Append(_(L("Local coordinates")));
diff --git a/src/slic3r/GUI/OptionsGroup.hpp b/src/slic3r/GUI/OptionsGroup.hpp
index cc3d89b1f..6089e18f5 100644
--- a/src/slic3r/GUI/OptionsGroup.hpp
+++ b/src/slic3r/GUI/OptionsGroup.hpp
@@ -175,7 +175,7 @@ public:
 					staticbox(title!=""), extra_column(extra_clmn) {
         if (staticbox) {
             stb = new wxStaticBox(_parent, wxID_ANY, title);
-            stb->SetBackgroundStyle(wxBG_STYLE_PAINT);
+            if (!wxOSX) stb->SetBackgroundStyle(wxBG_STYLE_PAINT);
             stb->SetFont(wxGetApp().bold_font());
         } else
         	stb = nullptr;

From 53cdb8ef539bedef38367c5f0136c38ce93a3458 Mon Sep 17 00:00:00 2001
From: Lukas Matena <lukasmatena@seznam.cz>
Date: Thu, 14 Nov 2019 10:05:02 +0100
Subject: [PATCH 77/84] No sparse layers option marked as EXPERIMENTAL

---
 src/libslic3r/PrintConfig.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index f082e13b3..6fa6ae3a2 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -1826,7 +1826,7 @@ void PrintConfigDef::init_fff_params()
     def->set_default_value(new ConfigOptionBool(true));
 
     def = this->add("wipe_tower_no_sparse_layers", coBool);
-    def->label = L("No sparse layers");
+    def->label = L("No sparse layers (EXPERIMENTAL)");
     def->tooltip = L("If enabled, the wipe tower will not be printed on layers with no toolchanges. "
                      "On layers with a toolchange, extruder will travel downward to print the wipe tower. "
                      "User is responsible for ensuring there is no collision with the print.");

From 8c22b0cd4f85bf75150d30841473b69fd2c17525 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Thu, 14 Nov 2019 14:02:20 +0100
Subject: [PATCH 78/84] Added MINI and Creality Ender to ConfigWizard

---
 resources/icons/printers/Creality_Ender3.png  | Bin 0 -> 62795 bytes
 .../icons/printers/PrusaResearch_MINI.png     | Bin 0 -> 59414 bytes
 resources/profiles/Creality.ini               | 415 ++++++++++++++++++
 src/slic3r/GUI/ConfigWizard.cpp               |   7 +-
 4 files changed, 420 insertions(+), 2 deletions(-)
 create mode 100644 resources/icons/printers/Creality_Ender3.png
 create mode 100644 resources/icons/printers/PrusaResearch_MINI.png
 create mode 100644 resources/profiles/Creality.ini

diff --git a/resources/icons/printers/Creality_Ender3.png b/resources/icons/printers/Creality_Ender3.png
new file mode 100644
index 0000000000000000000000000000000000000000..52861197c7f17d27df53b6872e1e0e2a82aac410
GIT binary patch
literal 62795
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
ZCj`D1(h~=DPRq~0M?pqKx?0jS_<yFwhtmK6

literal 0
HcmV?d00001

diff --git a/resources/icons/printers/PrusaResearch_MINI.png b/resources/icons/printers/PrusaResearch_MINI.png
new file mode 100644
index 0000000000000000000000000000000000000000..01780f9ca83ce57f362c0c4b3bc8798f610fcd98
GIT binary patch
literal 59414
zcmd?PbySpHyErU@Ac|5VEeJ}-B*T!-3=C4zAt?+)cQ?`vDj+2#B_bfD(jujF2nYxW
zNOw2<2J3m=^FHr6XMM50KfYOu#oT*eUHiKB+@Xs1q^?||yL9f{xhv9lC6sah%g&v{
zJ9m)~_l<5sXBzj9*!J#yhjZuXi_ZS=^ynTloI6KlVWz6-s3|Wegt4*WGcd9-#PYdX
z+2Wwjof8pvwKc$4U>%tau_k8LqAaUbbu7$gMxrblP<ep7EedODcGuk=tKxo772|G!
zfg7=ii!qD13gHM?VI2*aU9Bvw9fVv(S$@zJ!hJtm=4WC40pe&O%7Qp!$gC-^$c(bF
z$1+3t1b8t(2$UHH=K~6WA#gYkGY9|_<Oc}y1HrsN0U-!L2n1sO^<lwrvo|spQkFpf
z;)Qz>WifShv=!p#cX4sya{=?&*qiVJ;cz%V0K^Xh@!}wO9o(!P4P1Gx9aw);kia@%
z?9FT)&1|fh&nOxg+Bi9ivfw2Bse+a5AF|dCzs!U)7{9B5EkBSCaHi64KzaH99@NU}
z543}$q%)4oFM0owu!E|bEtX#y>tN$#kHJbhW33%oe=~D%RL1_L?*9TE2mS}yzzOG<
zf8vaFH8cL96At2!q-Tqgntu>5X0`@==C=HQV1J8bYii?Y<6vs@AI$Y<`(KP^g!x0*
z*2&)ThsTUC{8&q@6;53T94zpUAdY6n|3T%moqr*FCfpyw|6-kg5!+Ts*}&1v+C-EE
zaHfT=5Xv5F;Ams7YGY$5%A$_7=L7KpnVEm?$=ev28M{dsIATRvaDfTu1p;}2U{zdT
zg5W|B5H|oQ1o%4{?7xBnV5&ff5L8eI0Q*G`mk&k;jt2h<_RkdM<%OiJ9UKj;F<5B{
zQ5Kx2d}d}wI8s1kV=Ms5YlIa5@d5x47_XoK48{wF0Kr%&z}Ogo`6&?&U&03CbY{~t
z{GT~#WP`!c_~RELK`hu13pEzxHHHEqXVfsfaIl~eFGK(?2!a>@1%LveAEM)^DcGCg
z%7TIA->FJMQ33)eBt$|202Yu00wHh|S`v(aLl9^%2qpn$VaA1(kP6n`%)s)Vla(RX
zUX(@it{e~sfC6y_g~5LU$YHG=L|Nq2<fS#4rI^(b%F+tVKoGA0fFBL!gYx3)#9wg#
zN(=y#)Wnejf&nlj3-iyo6*?n_a~&4v(Epz1UxqmI$d5?C;_BURSO3j_d^mwwnE!%D
z*;v}xpYaf7!72IIx-<%<Xm4X|W{KNyP?kb6OG}~zfN%i;UR+qQFdJcnjBV_#3~*(@
z%*wz7%WrFK!oqwO%R<s;&l+Y%j;5k4P@o{>@5?xaOwQIpa1hS9Kfo2wQV&;O?aeUK
z){a<vTYFq=ofR}3)GrX6!*I_3wTNT>15d@k%GMI=poq0sG;=+(5KjCb8~0I$D0@X4
z2eUIGKN93O9nG_PWa;#iI8YG4|C`qR|FrSfx|+2aPS@X*<P9uvc2P92HgLf4!2II;
z%T*F6Ua7m#pH38##AP!s86AEo1OS0?EYF-PgtjzrFts&v{c8_+mVrO^e)vQMcZT73
z{Dw!_Sm7+=;D9wknmPVWYsi@rKd^q7K~usEmnc8E{WShxd-wmg_tODC_Rb<k6^HdZ
zE&efV{%B)s<KSff10E+EfM4K`(CFW30R{5|e`_M?`V$@(N+$LORzIBdgQ<$ClOxXA
zDz;dxk-CAU6HZeo93UVF2jY-_e1366*kbJ+aU6dEK?H$7xFGbu0R3izG&6Ac1&E_^
z2K0-Hyn*X~Ap``0apx)&mybW>k;mes!3E3DO!)0QIWrSeN0lE(*qOG!V9_=h1Iyo$
z494a5pB<Gm)8mL>9ZhY{((g9{E{lFs!A0p$17NV$*t0|OZ!UInz-59m*4hYbf0n(!
z`Tf@Jr)<AhHB8MMu}A~Uv%2~h4GCOnb2PBjvcVBLOBfuLzr_2S;L_G$sFfAk%o67l
znBd=KLK)be+54wxznMuHm|3H2tR3yo&X(V5{a7$?z@^1+FckwF>aRTgvu0{wZ)=T<
z+`oZ28LD70XEBFcJ1a*&E%ImeuSoo--5)BNx&N@xU&v>ccQkW0b9DP{)U%e($`)7e
z@0#K4YVY=|=~BVk{rYBU#{8p`5i-F1ED1Qfn>k~RSbi<r8sI|qEG}@OV{ELQae;_6
zVm7w7v10yN^UQ6rCd`gD%m%i$mS&hAdh<J58~y6D{?t+y{{O_#!QgM~%>L<+!~$?Z
zYy{*rFg614LX02=yar(0*==ZGYzP9uj6eVZ>~C>hOtEJ*^VjKqR`Laezz`uY@b~Hd
zQ&|TaV@DSQdo02PS5tp?vOkLOS^vX~LY;N4aApn-GixIo7YEMY<T0iO)+T30=l{Q<
z58TiQfQ5sMc#Vt=a9RK%Mz~`dAb@*>!N39nFt~srE<t_@`mg%@LvQi_zCM4v{#&NM
zhs2LS_#a$<79D?`kN+_a{`Z0R{|vwXIqv>f&DsAKe&RnHbAIM9|9?&IpU)CMvlxAr
zr$0swp?}J(|7|4VW)C4;v-zj}JZoQ#&f3@iWoDk?+x%Z?IM0IRPYL<c0V8nL{;Zlg
z{3<C(1Cu|+MGPo`1fu~66bgX?Nx%h=f-r<27yyUDk#IN=frg0uFrKB^-!UW*D2OCl
z01XlZ3JM4y1fUQUQUHlW;0{?368Y~KARtN-4nzVZz+eOvEeQunBGC{8QW7PB1|lRR
z0snvjg$n|J2qXZ4fWgp$U<o)HCm%>a0Es}NC1AjRz>q+rQ7{Bj01ZH)B#}TUP!a_I
zNg@y^001Z1KVhI@C>#?>Gy;l1Kmc$Fq#zuJC5VE;1R*d<iGSw-0icm!Nr)s+0uF<L
zfDjM}i4#*0350+FC;<@YA20+2(P#)7CWt~qfCw;HP!NiO!NDLf8~^~L5dR<*L=Xl6
zK!8Xz04e}S!6i{>BmxGPkQ9VNAd&zS_}_UzQD_hV28Bt&1)xZv02D_ah6YNYBte1@
z0Tlcn{2_pp6p$3enO_nm35DR!0{{>Ng8<Pe2?SUWXWxJ40Ry51KoSB-C<=+hc^nE7
zM8i=)I245w7Y+xb{{aID2SRWj!6^!pkbtA0K-|ECV~Ie3aQXlc|BfLDMoJ=pf<QDB
zDu~2k<EA@+ATFLja0nVL0F?Z93<N*`4ibP#0uUfc2#zK$S|rdQm?Q{|6ALBq4;V-w
z2m(XntOZ4&B!Dm=5&}bl&=NRnK#(|2|6nT#gdiG%(-<j%n+f3(P&fhr0{|qTARrno
z2t~mET`EZ^7#9@+Z~-`60xgI@BXDCO41_Zs1lK=Gg8sqh|I;A(?>x{bfB;$m07oG~
zxV%E(l2s4}KuhA{9hc8Y#6NiOpGRPj0aQ@X01Ux32e`W;T;M@?1!1^(4F-i98X9B3
zhEO=>-?{%YEkl4YR?rZLJD8z{7#tZ0me&w&h~)*qF<>JsM8F7_D*sOFcWs1&freOP
z02Vj*8XEJ0j3Gc?IK}|R3j$%W0#E}(ATFB!hW(=|{VZhs|9!>#G2i`~e}2w?ze?HP
zn>w+7knDe0`um~sk34=fsM0D5KjxL6_b$IH@V~Hz0RCP8|4#NlQ24R@V;20`1f$J<
zwEn90PPo4A$EGqC*HhyfyWjov&ne({(~Neq{?)vq4J;l0!ZDI`!~TT)xqfz<{1E4F
zH-^8LaMzG$U;o^H;vW9opyGxRQ5JjL{U|XNsr9*Yy-Ly&2vyf-OUEwHZc91sM%U$6
z9_D-kCu>yYN4AnnK01eoWHGU{4<d@F-?L+;ArW|hu`l^lPe4x+LV`SxC7yofoITn<
z0}ytb30f)KJj@gt7cMOgKRT-AuX(dm?y$OCSXe0JwD7D8?(|Y7^rBSn<1J0;gVS*;
z!6#8!QeZ}dIo5e#TohpI@m7M26wSe1ce!j<60cjLIlbgTVoz?U%wI$?Nk`{724qBM
zwWtbx=$7imaQ*)P?d!o-`%Up%EF9TSR-3Y7krGclhq}a}P1ts|RHOlb15c@0PicLV
zj*Pi7>O9pT71@=SnuTGhoa*Row>VyT3ExNE>@jeS=p8z0{yc`|OK;Bwh8&A&rzVJ`
zj3;)`Q<|)JJ|*Egh#1KvyY@6yC{J4}!Kl#1-9;`D@)o(&$Cb>#yvk61%?!^zfuizb
zyQHCUBHUwHLEbLWu3~7l!ZQTRhfP$KWV}gHu9X<TK|cR{oYP@8-{QGKocATSX6iti
zWEXY9q`<@&caFQ<o`57t{725l)?Iz`)8tn|1;vdoNfstnjGyO7*?7tF-0>FO6OFqW
zk17tua_+o&%2j(!l#9iYX2(iCIVNMaA)u5T%$+^k3QLRS&2{B<5zRodF<p|7(uh3f
zUw`;<Hl74eZAZw=JG;y(y!U&egsDlAobNhw0#wpQB+HIJu<I&T2556=Gw%q$acI@s
z{e7i{1<_5c8}9VcqK`*@V}D~@jUHb%clJ{J*Q>X?lEUPm)JuY2N`s$-y~YmID|M?}
zN&$J@D!9$&o)cm@8W7SGcRn=hp5qA3JdsM%7`Y;t1De<-E8=PxO5yTAE}w<qBMAZL
zQR?k%MONA5q0RRD>Oy{fUGRPR-sl&jJ9@909Fy3&<gz}#YI2_$v3&f@sI^mU)K`FZ
z8N`ip@gqrDThoa+FhxeW)qs^E&5AVV3|KhGxwE$Rm(t5zyJhIHS=880n1QQrzy#dz
zLyI(xy2OV7+1LTo<$D~1RnnZRY(1T$9Nzwb)Tn^!YYISPkMhh*(}l9Z2!?oa{iG{W
zCVIlNG)m-;;%I7(n1iSYt&F(K*n17Rgk8fwCVY5rVX~3%SS_m{_K6NL7jn=6Se}%a
zlv<PBWOB9PUGidL11I;cr@7eownhm^SugTpu|yw-92bJsk}=;STj{;_t&94Gegi5I
z>*Sb87x|3O#@SzpAikgv=RUfV&zCEYN><$%UiZ#n*!2iGNRzM+J<prSCoO5{=lMi-
znQ`F0aFZNwg~dFW=%(q>PQ)z@x2xtYg_1Ms>Xce^T(O|Mt<D!A&y;dErl(y+@G<rq
zc`7v{{GA=$4z$jj*yjDowR`&|$|@a7PnGYNUoW+2ea*Q%g~uG4RN9r7l<6uwStq`x
zJ=#oj=L&arUHH_|J&Res*iseA6r&4S(5%LXG^LuiL=bYWbQHA=g1Tmr&N7t4cH%5A
zx<V4v0~$9|67sY^C&1?+hoT>C3GNe%X)Kt2>oUH2EkV@yD~;Arnq(=@IDe@*N8Et+
z<oNw*TfiK7Owq?~2RFW}?4opIk*={!Wm%e9p@hH?fu7q$v7regGUTDR-ub~o*TtiW
zTMY?%4!E_d#?=cQym~7n2syr)5>3xZ@P^R<dhUdNev|M`@Wa|^NWiM1OvcyVtllwk
z<_$?8g)swdQ>#?U$bF=Xr9Gi+ANn?xtlyls@Etz$imx8VQlx<zb8}B6ND3~Ib`>!;
zQQw}4Vjx7FauSYP&MO(rpm<tjJnlxu(&$JQ3WjFC(qf}HBBK<k4@oaOd13$6M@dG(
z7eNx+db@Rc!JvO=*X#Uv(S?GUL-I{)hDhh?noF~chV7(k-<kM7i)DJx8n1bJlp<ez
zyjv=}P?7%Ns!B`V=&if7p<kE^K-(eU=_``i!;fu=>gAv2nUvxycU<>smy;JakAP_>
zF>)~wyphN`m>5*pFqI>S_4k`)J-LlWDjpolR52;8y=GSBQWGh<CTjDnfSyUvWy*gy
zt<0mP&<TUdYzqnwj#r3K;JG7FRY>_%He20Ap=-`B@Uk<HR<+S$Yh3=SezE(u?&Wyi
z8tS;xiqqo$XZsJxXx{JJJaP#OI8+VDE%o*d5&UFhVEyi~7^q5cdCRkhI;~AOITzI{
zQmigh0W_Z5^R>+1z|YSlAHfTgCXf`8p0}ibGM++n(DSVSP^B$tx72D_9<SM5@K$r+
zRhdt-O?x&{-_H#ngTL)Y%_`<QkF@xyFL#bu*X+IIK3VhAwyBtwb{Vys4P&fw2CCRl
zNJyw@O;ui%frpTbT!|}@D%UYKwSAP4flx0Jb8nfvEqg<&)O;Id0khm&Uf5prDYqOd
zQBkef8GJ9BEbjwZ)Aq@gs2zBG|MH+Q^yMWtA^*{#K+i)0%22Y<E6sk?g<jP!Xe3*}
zMUuc9`y4{99hc&yZ<r;sCgh(adYHT0zjWx7y4hip<Sy1Va!sX_xs7EiL!KJ_g<R5T
z4}Q$yK%3!1_<~!)&Y&Ql-BFiY@~zF7V`p~V!StffX1>1YYG>7oRvBj3``Hs&4Gq$4
z<qO%Y(b7xqpddh!5iVvKsSB=Yar-f64VjadX~mX5&&>^Q3a2i0-X6|Z5L<s&py0XT
zMxC;r6@DGRU9Q8E5V#uF_NnaKqqQx|1katr6qTp-BeYuBuQ%tnuchUa$eG2Imk!i8
zw1TQdDoI3{f|g=u72-A+(=^z?I>LB7+=&=QY=3zvMSBO^7B%PAtoy;?IPrrc<1V%M
z)0OSIci*3A=-X|_<%*X%(aU%^?rwdnv<9(#V1AIJmpf$2a+5<Nvm80W%o0G+y@9Wj
zJ-4`+t&=w?cr|J&osm1yQ#@<Pk^(|UvaRMeWuaexdfY8_CoUne&_^NE4O_U}-r2pg
zVHu%E!0)y+OdjIQB{i9g`BcC%(H)g<<s9cGw&VDHvHMd4(Brn{DWjY+JG!7`To|;K
zcAhfKS2lR@ZRZJJS-S3pnH8xU<n==H<!|dleBLI!{yZYSNAXPxbGXZQdYoP7waD+Y
z-Urh?ITYuiyOErgYx7V!&uBWLH^AWi-WQr}^>ANb$yee#f&&HGbtXg4n?@{ZL=R=-
zS{)S%1Ttfv8kY|BnF}1e#f8#D5_h3ivD+q_1oGg(J<nN<@>2mLQ2`@TNp5Mh&4EuO
znBQ|#Ja32J*f__o05l`*m%tE}di#T^H;L|N+s&BI%U<etUY45T2c}9QO=ySB+x-Vn
zl9W712${*Qqfz9b6r=q$yRiwmXV=yzt0P+pyc;7O2WctC`bGx1-{%Rx5vks!7C%|1
z_C6?0tDSixY)#aXsk~THYjlTOKEMCl`;Ql=l_MQGh54)JCc}NaXA)<RCbD9p>Wu3Z
z$B*w=M6n5yioKgogpE6HUKrHzS}rZBnn~Iw6)z*dIJfXpF;Cr&k-Ejnu9{-xt>wfg
z6UHu|(<PHFUZJD|xlOHGB21W#XD|g$F96#ocYYyJ@j-`WXZ3mq1RZ}&e0QL4MhU+4
z8|oRRHko;rO3O`qBie%=0O9GiuSdBCD<Q-ZtcHp&Fx4{KIrc-_&emgFwP~k&)ML@!
zTba?Lj)#$|l^%Jj`61+GCF?gj&@smtRvtR7_R_S?XTf?~lhi)Pez|&U`u#HV<l5eM
z^Oe{yUI~#*fLn%s6S_KWuA!XSk^EM4I%v__b7gyQ)OKChWz4QUN1ha9|A1+9RPErv
zW1S27#%i>6N<pt9+WSP7FuusdIA`CBX!FwGrYSTzabu(}1LP=7kiehH`}FySWS(Cx
z+IM?>R^+SQ%>Kka16pB`#7$cFS<{g|_!4P+;>0(Sl=8;RTxtCK1d27&=2pqGaIbjJ
z(<+a;lX9D<t3I|WKHx24xrY>i19XE<X3*p%IH0{G<978PmcMRUt;lP8w$t@1=QttR
z6c`G<(0(JCVQ_HLi86yAaCRoq!^miIuWF@oc5?jmBy3jKX=pXgb+N!FOVyc1t1QH7
z#MySoj(fjp)m!Scw|{9Iwy~HlwjY(9uP(X-^U^9{(|Sv<wP`Zvyq$)5wU1boGi%y4
zANJs0jJ{XlaH4h7y`;dpx4HZNv(viPZX!%O%NSqIea6%8%@#8+kMpZH;>ykErNvKH
z-tHgn9^p4{o0cc-b+Dx_W++1Fz$DSp;4i`-9a0aggHI><PdCOpMHb77&Ozw=Ajt*S
z;;AhChPbZ<J~f_#5$FtN=;YrXl9FOqsQTU_?$NSaw>vth=X2cexa$aXeh`uS%#K04
zZt{}MDC+2>BtL2Uv8d1blK5e15x$&)Tt>={>9{}GNe}d<4@{}_VuJ*v(F!Ur@Q(^~
zk_i8(@Px*Xk+8RZ?D515M5Y+L6|x9nM=@Eib!Ujc=%>0`=iqABF0kArlj=3wJsutH
z_o<v%XmjgZJSAmSQ7JoOE1a4X;_FjUiIA5scCDvK-Tpc&x>h+@v*R$E;?n7Ju3b)n
zjNqmgQ)^{#!aOUl?{lx~%sXT>Wxby(3%WeqbDX~7LO907YpPA(t#A45XtNRKS-jXX
zgSYK`TnOK052=qI{>aMdCw8&jA(sW2-KYacQ9qSi&xETk^Yh24xFeTfQQ&+MR_<#u
zEt9~mGL|5~MbLBBky=fEiIc0@lyA*a)l+UcnNX2~UrP+b3LFO1WtdXl28gK=rgVXW
zq4UoTKWRL8r;1D+A02Vpo~s=dIedP(VzZuiYj>M$507$+5^_H6O3SnNvib)m8r5@>
z{71c<xzE;657Ay>>iL0O1k1VV`}O_Ug$1s#$b=2ryVrmo8VaQ6GBGM9p4;5|hih+Z
zPddU^#$BmxJmyRHCP}@C->20bU9qg)4*Rrv@~v*{&BW)@I(kB6shCwFAFW)XOPFF|
zv-hTyc=<x)hlh7hjQHk0@3pO)AFztg8MlZK-^UQA+<AOogejWsyK7lu?V4&ML*nf_
zN+n_jYCYMlWA>lsy*AtQ+TWfYw(#hbBusc6+KqCVq#W)YZ0fK1rPZ!A@$dC2wZ-dP
z0kR%4(m-uQnw(NZu|k|rd*NWwm9L+{>7dmYk`XoY83p`DAE@g#9(Q@o=tmuQ3y-%G
ziEUz$->Ns$I-BYFrWVJKhJ8d%)ofhp-*0_aeJ&jvW=0&f2mr$?jK)`V6|QHE1mw&d
zBGN+Ulai8_+}3J^4_l<rvTPS+rk}7Q9+WW&R5b-eky8Z_QqlMW@z^f5%DlicwlvZd
zUs-ba%zfHbReQx#h~$Wb>7`t_6@97Jt-)Zc^OzfZtVE$3)7gtq7S0n>;8vO;!3pOo
zPn>K*x+K`PXlb=bbUr`r6k_AuqF-uiiigRZ5?TMGV0F^3U$>~wUpe>T)K<5g`hmOs
zv+jg|n=@cDNE;)CQ|g6B#40UA1XWvY<`1uioRhL>)xB<Vy0c+%vQnhKyAXZcp<fp`
zShqO3#8l)k29GxB!*^Nh**zKUSUu?u){j`UN={4)%~CHbR6tZ{P4C9*?L_LIP7W5)
z&oN1mX?fq#C<yNfC9XYMWiqLrDD~byPk3;ckeG*w`1H*<()n5xZr(~SLvnU}^gR}t
znlxD(D)QVVEcz}wW&@3>%w1!5PL@TCI2kVa_q=JyM4~Ou3oW9GVOPzF2kLt>XnZ&M
zA(<tmSOboD?f^u1fws%B>G67tm|0s6(SA3P_+4q?2nL#IE1!LhWU=i;1(CKM%O`*b
z_J+>XSVRt63fSey_gbOsL@L+a+4i;)@oO~X#%#G9@v=HcWt*o~4bVZ|P14o9HYTR>
z11Z_GlOyWQQKplJCc3USnGWV!y1u@%Ya3-c{hE8?X*#b|XEu;bLphU`!4%MMUl1&#
zLETLAO!-d1K!;pgu8k>PKRP8-y&y-`K5xKeO^1{fNi!Ts#zmJUpeH%yc0;%PlJ2M|
z0YY#(PDHjy$DuFqvfXE0VKq#pMAFk&#Ts|HVxT7}*cp=0<v~^PBk6g?Zw(ppZ;V17
zr!1(SZ>6)&mPw>9tXglV-O&4PzBd;v_P+Bmu}*F~(aC&T(caRmm|bP&5CkaD`gzMp
zEBK3ZTOuqFFGdxpi>If<`=l)`)7w#4Ko8VxC{+ANEK%h7wT`D<?cc9iMCmy<P@im$
z<XR7vEOtije(gwPxBBLAx=vMHDCT|CroVHtAFj8zNVNKHzGK>)c5vGs(l4_gMPbnx
zc++r6hBo$_-~bjbs*>AdN){00UMgKWO&M?#LH2;)10bt^gV^t(dRy+;3ra%yvgU9*
zOT){<t<-ZStc;SAC!Hq>69d)L+FPc2b7kVMV&Y{FTNmz`y-A2fHFa%%3@tx*i9+d4
z#Pj^B;QUkDY1ucHBZsvy3Yu+H@%pWUb-O4L8PB7>w4?gN@zc~?=84aHUtXvs7ay`)
zOO1>S_dke`6|Va5ak`5%Os;0+S<Sr6(!E$kB{wi-49Skmsz<}fxVMmukF&9Rn7B{9
z<Wa|=ScpcUeOGfw^~QA3@kV+4@lINGNw5YNHc&Q?A+Wyr#Ce*7p$lO#2&%j&BiwW7
z=+{s__3(U)gRM@>FuPWdX;}gdJpv$WDXR9Fk$kDOr{|<AdeqrC$S;=PI4w}D^tQ0R
z+ap!giu<dL28fWTJmyj3f`|tsTU$Gz5})yJ{CxZUq-pj&f#;4!g2f}wG40O<+qjPC
zAEk+t;-{^Lu3uy~5x7nEx-^uNQnp?+&dNqOmg6%lsKaXF!ISw0&)2H68<*t!lM+91
z0&4G<dN=5YCcyBjPeoV1SMa-ENFM@%nv=(mW_I=W+hl9!-1+qK&cB!QGVW>I69j|7
z1m59*E#PxgIoL(dG-e27;Yv=9iETB-upO_1ls4qzCDyR+i@xMX?{jq)b9&##syB?M
z6ggDBa9X)`<)Ogt5`yVjoU(u(d-+`ggh^rvr9(5-Tx0bncE(?J+K)Ug-+Si15^g?L
z3{&vl!-#9YF{H}Z;G29~cR*EFv!IoF`fPUabVt<318A6#lqzAtu5wRjcF$$Tizrau
zp{!K?QqyY={4JJ`8IG36+LN<R3iPIU*=xt=>iUt~vliQld8C}*^u<od?+H#@wiX&c
zpWpO3omm}s-p;PucWEi#nBSvRI8rXxdODvct(DRBd5d6FcXVmACVYKeNoM-e;coP6
zpHsY8XP!o~i%9>~!w?$W2u4M79{+G>W$K7s_kET4mK{UO;X?w0t1WLVMCB`GZsXId
zv8R#`AGj69zON%m1jPiqzq!}0m&|*9Me%{m&S7=7yKk3dfK2%Zs=9+?kCp1hj7`0h
zAPu~=d7r~u<>sVm`$x0-=jG%gqBAiq-spb+X|U*JJd@<Fa7_wBLOxAUlO5fr#|nDK
z!*0m?fDw;`$#Njqr_}XzaF@@%IE_}dpH}t<-#kK}O_x>AMVukOx1C#ry*ixu)_sSD
z#dJ{8f~eq{UQ>gUXlph_;VcDRM*k%;U`TOWCs`oza;LJ)efgQgo1@vFw(HxOj8t!W
z3a=n(OHitLn)JpM0IB(*3@I_~m256=SqbOcn#3taoB-3FZ^GAJ>ByzDE<eg&12;Wq
zLAuzGp2&GMv5W5%N2hw!@AKSPm<kiu=~ykS^;7U!=o8m1UwEM}uOOdZ#s|p!9?nw@
zz3NhyB3Sh%iQ7p>Jq_??S@V-#tEhH$?|f|_wE5$vcE`ca)Bs~si`eFUu5z);muk){
zj8m(pGhQ~ei_MFtm+lC!;59O{Nl2Im;x%71JpZsU|E3|}aqN|*2VULG%`CTxkw@xx
zm~Rd%xn?Wpr#uXG>PE-7mNEez`+gbAam&4G8S@Gr9hOLiVscbpBI`R!RjP=#wAX3N
zIz3J~JzCfijb8g2FUItc-*ZOgnfC@~^**nSt1it!fI-M}!8OAM$!wK6cqFA4TTtu7
zmEkC>PtrLRrVloyCuDY1ILR`#3?8I@dz;j!AbiR*wwn=6MkjBhAU?8tb+dN2X0`9_
z>3Su<ql=5YX|`P%VYaPk@R+YyrH6aBmQsQ0x=yrlsU(f2=F}nYd2wbEBwfMv4)vI)
ztNwlyUJW9yyNnTxUwqUbdz&$aGjsWfzOB)^F5TJU$@PeDD3?q*BX{P(-1Bvf>fO0p
zP+6wgs(u<&L4Go0GLzeIo!5o~b;@y8u6=Lu;=9!oc^$85sOM2knmcJ&apHX5#}}ck
zo%@JBQTRrGv>~mkFqlbM__nvn5ogxJikhlYQs?0-FHA*d612YD*gK(=|F&tu?|yyN
zbJyeM=dJB+`^6NO_3|RGWB%rrmI04c3`RWGaJ-Ol&--pj!^)_KX07AR7N)mPpX77I
zGnmIw)adGNIS#()=h|}Am|x8A8PUdcB&k_eukxLoEZcmWkSFz0thm?O%~fE4r}~KL
zNtn?jXS|%$@LQ$4h5}a#_GBH|tWLb`=o?crDhE+lH#qXeW0}z}oYnBQsO$EonJm4H
z*jK$?Zd)GB4%Ri5rX5y~q-~Vt9$8?F!<@@`(;b7Iv$EcjJbA;YJm+*b>BYlU`^8lg
z1grDfeNhGvtw}4Vjk-yxUeWl*7b8g>GfiqO`^(znTU<HKZ2OZY;^=a9Ob#tT6pG61
zVSaX%9KSCH%<!cyty#|BxJ}CMx-2zMMqQPRX)iBT?0L!{j`vDo-2oT7*O&nh`Q&pU
z5!`G>Q^HTA^CUvPd@+>}dc<O(Up`_1e?qm29eqijK_R~7*_Sq%v$&V~YEJ1sTl51z
z{8Wv}URm$`=~d6!WdD}5*S_JYcEG+XX^EeRHy``#=g#7lX*C7jB7XSs!DnZ-m20k!
z96^hgnl+|dcgkAyMwrzbJsvTV$j%Du<1O^Md(B{(kCw-4Bjan<c_X6kO`218ZF9tN
zHEO+9&QmTJ=#E001$Q@Up}H^1AR7tp(%d1Vc%ucOmp?MTTsKWgSD&wHtCO3UuS_su
z{}4I(WI5oT2+!0QZ;7uFdnYsN(u_c_$_1J$j`M(RFTjl0vxG=DTCMYsMlHX}%%;|Q
zH}8<9t*`1I_0qenj5l1?J5nY*e2I%CaijVVC*%CucAs}Xg%)#EzVerep%KqjVPB7R
z9)8M`DhB!Vj3k0U;JYW~5cLzD;mE8V2H_jjK~72F$9H?0;g^obx98`z%JUBwPdDm!
zK~S;IH;1d!ds7No>IH@oH%Yu0G;kLklkaXXHg!99v-R8-Dy59g2fPcph-Nr?-)(-u
zlu@x@fbQJAynw#E$<pkP{uFe=mxq+d%8CcR9y1poDCe<xsAAwk+4s0bXBe(Mu2a61
zrOJoDR?hD;e+V11!^aLn6+By2uBG#xc4R+u{cu3PvHA%d)9RU)ZykzYd-Adkg`l^C
z(~2Z^k?F=neD7-9>eS*Zi%S;azaNrS+mn#E!&P3W;Ca%=w0N?v;Qc8s{v@dO1TQCt
z&9s~@B!C99R@Th?nVz?~nf--A7a1KzF)bIs;2{%@-+M9wJOqcFf<lk^1rg8F(S?AR
z=uH5x#!>prq4)g=JI0no<-7f)AFQW29>2evKg4s0xZL8TmTi&Feo?+-`|F6#TS%|8
z3f1@ZqmZ;^?rcRB%9u@$H6=NR%H=1W!7F28)-@|ZyEPke{D*5hqE&8Rr#fSqPL5zN
zwYb)gPmemiy1aLqsCl)jA4ruBC5(rw>9Jgo_rex2Jsnv|k8X@9oo6<@%9&CiYi(fh
z)Kg|ckgu7*a%k(l7lvquarZqcd4D6m7MVFT*%))rp#SBzoV-Hm^hBhN&#~IYtJzOv
zE54^QQd1VhsA?I+ey}Nj?o{bqUOA<CpMe06`za5gg`vjKhm63wk2Jq_HNHWSp~cQP
zCzrjIJ=HS|L$*?PXl=ZJ*G#~pTluKYdsXUw*&K(vyUgnSH}?B=gazrWULRq+s9gAq
zq>AIZ>sByo701-}(EgH?v6bc3Of{QV$6M^;#}g?YyGpz+b~{6}#kkYBC-h(iR<{q$
zH6Pq=X+dYw)_3~fB0}D>3GGrJZz!R>x^wr#Dml1|x`JvC<_*CRDZPxPVM^3HZ8+T@
zveVy>?gD_ppTel5N*!jerf$TB3r>Fqf2r|cCl#+Iei(R}$ZVhYLw9<4c-RL(B)N>1
zKan9x;o|f1dxRDRS_Um+1~uy$R^e8jA!zOk0-wtSgoNbGY^iw1XP<g7HQHIkR)elg
zfyBg``~sO-u3jsD@HOe0X;Zt%;Zq_v^r?O@gJhTV#$<rqwfRf2b1p`5vE0|qJ=gov
zj{9xAPle6P`L6Q{g<+!L<PV>))>)U+d0Pl2cvQri!|qVL)ibiACK{Y*&Sltw*H4Z$
z-tDliEfn%p=oo%g%#r9BdX7?2E7@E@++X%-Ch1ZGY2Zq#o`BWZ$8wlXTONA~T0;Yt
zI?KY=*u!<7gK1ApMFkv?QSZda6$e_6QU-ok;`q?5nD5jx+8+aaMI~b)GKi24udhce
zbg<Qo)|lo7%vNlDu6z-zgQPTUOnGzs2)j_-^r&nj-Rtp(Vz(v~lld$iX2!9i%u9g}
zOK(VfFk?}8*sW1}G>!4=Hd#J!inyu(1aw;@+k7DMBnGWM(czTNqsU+Q0*D}&CoFZM
zaSV>RTKim*0s|Qt5b5lqml4SSZvVyuNg&a!wO@!Yw9!pN;)RdW@t(Ia4fs%5Zb6PA
zTHR_V$$mmaQ>I>~B{oGF6WdB<UQU-fYbX~o<tjK_5)%4Wv_bhE7Qf(DV*<xjt@F3m
zVhSWBu4Sy}y<J!@dENN5J%(q*!z?Xp^JdCMU(V7@#2aB62j`@#{FA*E{qI<a4V9b=
z%ZJr4hK@^fU0x@bnZ5`MwNEz55+{9V+!GtPQOaiB=#?VVdK$Ll_r~K6``~TEM=ak{
zx+?1%6cW8ADKt{B3!lN-o<(604F+DC7PKRW?)#o7eP><$&@bK0<ZNgu_{8@XyA5e}
zm7Uh5;Tr$3G3!*X9ycCc$OF-<-r-v1NFRNs+g*l>S&Eceuv8#C;z2}x2%=Hq*rw=a
zm{xW`rd%%{c|8nCMkCT9nbEqw-TCRw{acjA+`v(x@10NNKTQzrwXo*S)uj}a5QUG2
z<YqIrOav|3?2U+zxw2-<1WI0xf4%NYbicxwms_I%EkR&p(Ox#BtQ_rt?3_#cbY!Sb
z-8|9!vfYI2mUdUOAjgHBGO)u=#XaSUM^Yp*7UNDj<A@24$b3dz_7A;wrsDUS&(Bk>
z?B+7Ew+{;yJv5c?csQWG5tdPun>?0k?FV4KcwTX5?W%wMUDF0gWN};hbB`eb%~Wc4
zk4jrzYSx<>6cIEG1srZzok8EP*H4E8u)CX`vI`7g>W|EU+R?4O-|j^`iyQmobh~sb
z{KDz9ePa61%Q3qKM*ifaq~;*tha^nY6lK~G3BH%EoWfuW!4SQ;29MNqZHr~93?lAv
z`>8fKqcry}isMi;I((B8@8+eYim;yaRp#7C;JZTbl%UoExGy3)0tAIhe=*1XQU(OP
ze$SV=uwdNf3p`nL8MHesRFcvAR4F8xU_C&48Q)l>qihPm;LeaB0HJpxuobPk5|F7|
zX3r9d8Dt!`pc^NBp<eZ3dy7J%t-|lU6h_ng^QBnlHSLb>H~E63kAkC9Oo_f&jSQ1y
zZpmInbrFG0HW^+fMKRyZLvS=+mQwQ5;Oa@Tb{=<~+CFZ`WPPRW0#Wce=yTf$>@x28
zpx2CUnO|AF;q0`0=Nu&I0i6oRv<d@fo(hlbbJJ)dqp>8cnAyo2^edFg(cldy6hUxU
zZA6)5%6Qh1a>Zw@nuEE*>~QMI!=U0CB91C715(D|4!5EsobR$obp03|y1on;qRz9h
zVCbv<IoCLS+J4LL;c&0@ijbnQrTLSCc9N*Yj57ZR6NILI@82qUUPOOO^;oTk5q5D;
za0Je}lJIDD_WSJdwxrr#GD&q%ubjG9XeBND{4~gu6#Y~ppiQ_(PEd|tikuxcY^mk2
zSS6{OLg{0xs+u({zu10DSk|VFl?hALi_Q*@2La)ocKBXPZl+Vcx*A^FFci1?X!*h`
z6`y;jZi7(d#l=1jD?r9Pz)uYglb(3G@Fn#gC9*Ud^@$#AREaSjV~%aFY-nVN2)H8y
zl0LZqTJI9x>Ex`~YD9S2X0^G3P1n|3V|!oSX@QORes8pQK&A}%GrP&V_oE-<Q?usG
z)GDyDDf%DJx$wTQ8$pe@p3JvwM2UhSJ7OQn!c?#UjPy|x!d;%kxRdMDcF}4V&<(re
z;=&tt+--VW?w)*)=}<_ud3O61*w>ILbFMf#u*%dk$AKyMaYXLg*zO5_k=Lk&>xK&7
znkA(nk>BWh^mLiJ5(D<oUv5k;>|+9E?jAyBGj&2ZD;Asn<)Pw08bgq*g81^Qj6;~{
z`_$2qp%N$R!?&ZITPIcTyxcjd-VW%J67r4JHRx1t2Kk&;sj+*X4op+mZs>nlFcVjQ
z8Q?5Rw@s_nfvy~CWk{%1xiyh-kV$&kg}UvdyTPPLpg((QvlVESyC=hG6nfpMU!Vp4
zGOl)Hd^;#Uy>6ZKmASRVB4TU+EEm1^x^d#jHb{84>;?Y{n(cv^Q&3Q<ky6_0vM%;#
zy-QUXKeb$@bnO5#YAMdxi_MJ`;FskkhuH9k+IeK!+`M(t`ZnU+8ij_RHq@5J%F{%J
zU6SK0G;nWT4lqBBkdk74Ta|Z@q=BHOvt-aIIbbC#Y*r@a`Ifz?;%6@4%H1roMtVl~
z>`N|Vj(wNwb~}7DVi5i%iyI^3di4vwoIy+nyn{NW!9|{nD3J-?)$iKl2gLgOLo}W7
z-n;MOtL?r^S={rPXkhhdX1~r$Te&+)UA?9zQ-%9|Wi$0F=ZC0<b@z5Dnb|inaU`K7
zBaGi6LktPZ1Pr8V+$xoaRja_=qowsqo#h+!^b0k{hm9ozj{db!|A^?T4ogD{M&muy
z8~OBwn34YY4cH>%Sj_{<sT{dM_zk^5uaAWFc?$k^8B&4<Eqw0YJ6D{S?B3;TVTB;B
z+t(-I%t3%Rp{lQ3cp8LdMw;-Rn_l2`udJG1c&TI~U<xsQ70~?2^kqOKxc6<%XdYTN
z+X={c4Q0}AV^TT%_$i(DQ03i&3}#(!6`lsgeDxtwp^_O)+F^SOljk1dp2)V2t?mui
zIj%Q0BlQnf?JI+Jm@7$XCM?oC#bIAdW5zNhBThVtW>?;sFZ-s9(55lK<$++=p38ds
zFYPNJ=gIb*>A$MCDP%t&`ouuFY|E}OliC<H9^-eF+s?81#=@3owU7Qzh3T5vm448)
zaNVZ&?B${pcJ##4;tSOqR}FfA+(Ucc)SHheQmyTmI@@T3%x~|m&={=xkAB{PS0BG)
z^Y1mXkH7f}{<%{7D`dEB_v+UA(-=C2I?LENN|oxY3E+JE{#VDlx|||cSm>sQoAC44
zLV<<47c$F`A0EE9xj9_F*-F-NEr(D|gr4T|lP?a&Pj*^7V^cyx*_~A_r(OIQb~2np
zJrr}AnO_pzBQDA0&6S{fjz}cCHH?<g;wZKlVtCv5&38R_<#2g5#mfM9I`eT+1wR#U
z`mzPN?6JI*F;0gcfaO+CUmcPz%2cYqrP4RWkRWm=|F-85<+$5Su~ZvcoW!Th%XPc9
z-$G-FmSLeL%O%}sx3STv>gGVk@psMKNA?LKn>@6ksSC|lu`gl;+$emF1S~>HOaf6Q
z-2(YTTx!)bB%RSG3u!MJ)}G`#oD{+Aw}`!}j|+;Xw8u|zKP|g4%EmJ_HPF9xION?`
z<a6U;T9|F|MURU&=10-8zv_7Hl=I<z$P9hQ&6CZ>K23*jcv1A?cfJWZ#^VnN-+o4R
z{yp@u5p-EEN0Ef(67Th>&x`WL#!FWfWG?GfFv!13Ac;181lV}?oydx4JC)T&h9sFH
zDAh`>6>&Qb7%~{SqobM+%xZWV{w)l2<+eFFOZek%=7Mv)YO#wJU02G9O(M8PSEeSn
zobb0+4%XPm_uu<^ZM_ns`+SR3>~)}eY3GU;hUbNPVroEl8lg|X;~weQ0UAmWP}d{}
z+L5onOGg;|bgjVVI3!KC67!M%bYJ`G+BNr}vG)Zq-Q9JSd*VB8i&4Te8-T4CV&4SN
zdJYFMZRzs8bjxOnHX643(|u1_q_aT&?<;#Li<d68DurE7Czw~BD+!^=c7#u^RNf(d
zQ4?ZLT!KW@aj;#PASC4e_#OD{bkhs6pgnK>YL?XJU23x&{-9Gr0u81qj7qMHL@A8{
zm4r94UU7>9TwWXxd)3D?pJ<qtx87LNHMt?!k_^nrkyW%Rc9MDbvJjZcGQ`?zq+4>n
zXBa_=9wQ}}<1oFJnVA_88TBD-`m?!i&og)O=;oxCUXQ-l%6i_GU5lL<-KT*#@I~5L
zyqnl7X{|Xu@+x0#E=_Oo?Z(r(n;$mir%fmWs3wo{xxS@K;!S)#buT9Gq_&GhfX-{&
zW2CBfZN<jNtpDD(3%Lwkb}fb2)zs0?t=Jo1SNaMTM7GPs++~w&JZFe>Jo>y;xz%2Z
zijr){!|ghdTyZy6d>(*vQ=CP3O>WBG^CY6b&dUOzoHNgJ?y4a@DXhxhQKvj`3XJU@
zR*{J-Q|6N~%Z?RbDMV-)bSqz4mf%i{3vuPhL-$zUl;Kr1bccdiS@2oX%f`6LLhf=J
zHr|O{fHphQVjwK3*)?|M>S}>n=^6Bq16okgE<1*TDxKxn9>cO;Y&I308HeOs<xXpS
z-dL?r4t7)3xt*Q&ekv7neQ&{|`V+JYUMw2A4x-5dtLdtoQ*pA81*ag=B}`LmCM}*Z
zdPixSYYE8fEm|-!!8cZY)2RNAe+*kLd_5}vg=4&6w;C4v<-z7gwvMuk5{6Z9eSpkP
zj-*)h8rW6j;{{-Pc{*dHGlSoIfcpbgUcK57SN>?#@fY7SW6*818Jfwg797nRv+34V
z{)9(^GOo!*-Win(r3x~HVR)V|Y0?edX!GiQX+MZZ_0T05jSNv2n@!eIi`fZzPDJV-
z5f+_JxR~Oxr{P|Mc_k8NQB>iJdkahWWm(sQwBVcHD#gc|98Na+j%Hp8@2?l}HK^TO
zbw8GLRLieE9T)pRKeoozDR!!wl!0)(VAfAN;vp_tPLW~r8LDwKBRimdO}mFME>z`u
z09i~U--9J2{<WU#h3n*P>Z*dntYhhtW>^iy@KJAW^*jTb$zZXlH>+wg+R=zCgA0#L
zX=AVR_zRxTz*|(}Aoc_D#J^LBxG7O;J#^lCqv1LXN@e5uL7GSNHCdN0ci{o6H`%v1
zhSoR=)=VPPH(HjOKIa=EubUfF=tKisW^-fs4ko<E$_x@RhH0uAypv>ln6xM=+6XVY
z1b<w^6H$6>8>t@p;$ujMT+e+m%3CC6<ys_HuDo_#XQ7K^BidQ*vnAm`NT(tSGBZsX
z*ly2wvv1NCo6!Qd(-^EwZbo0a__}32peK^d^t_5@kUIEV{T~0$#>l9+;i^ZF;3u`M
zv64Wa+8H6O_a#_a*H*X*u<xN4k+G?OmsW;>y%A9ZCVU9ok92n_we6u$XDlbcL!;5}
zW?s_M(x%KjF3_%6aH;zql<y<OoK&KLsJboeln>R71J!tqx>{c#UM36{ddkyUu0+{d
zNqQlrk(=3>>kII~bCexdsucL*IzIh3);kYB5a1cI1aJ@re({>}JI8wyO+pw6;xi=4
zAb`)|v$13Za?oK$qbVo|cHEG7`1As=X2<J}be$FC)>htDC!~zHlvvC<r+U{@&MmJ@
zJki$;nvFAiqs62BCN?k6Y^CP(o;p)`(3m=<hUbo8nA!4XCNQwd?jfv@sopWV*unmh
zB7@u~gw-hO)Hcy<@aC<QNDI>IT%c!+pKHfIBs|RfWEVj!@<eBSe6HedZ$1NSu3WN@
zhA&a3g#&1-o?ZTxE4gmZkgQ<OW$4qrdl!Q6X)f9xJcy|~ufGeb@gUV#!yE0Ye(0m=
z#Sk8Jed8nR$k6`B>pFwk>iNCX??M7BnXbAG2NpeWM6XA|s>7>R#*sD}q{E!+;fpZv
z=fQ?2+2QYIqLu{<QA4~+_M*%W);HpKblzR8rqg|yM%DII1oUM@xPT#dzS8<d97xMz
zO7Px`a%;}zpyq(*v7jjDCMAmJWZ7jQy@UmHQByMDi}GXy&30wQm(&Ag@+y0^7^K1}
zA_hXp$%!+`E=uZhGCpUd+$V|{kcnmcECY@0_3f2mSf(k6C6_2uo;2;JxOMF&j|Y{{
zdhhK+@uM!LgVvk^Ql{O{ms8(INjWR>#naF*Wc8Sqc+Q_!FVN|X(mhPb8-%Za*?xAi
z#cubh%eyVAMp#pK(NO+!QnLwDlG)(wlgAWs!GvzdKq5s@t7d65c~N6x{l!(sR!_*<
znxrkOPI|W~ax$>?LAg}>ljql>7JDt<Bs_a&{JMyAS&%lhk2B$}<=iWa!f!K{n1!9D
zcA_gxDdF)kT7uT%L5^>FsV%P3zxVybJ9?C5N6yY)?cdk=RZ8Rd)7PyvlqGkC9O-tc
zb9(e(?Ey4mi3u~+ppR*JTBTV&$#I?ke*5R|xMqct!DWe4$EnTvhUc7j>S6orM!QK(
zLcz$J;?wtHggVh)L|50oQdb9D=JN)+jC+dqCrNQ%YYry0-GR@70e}#tt5q&5hC@%r
zx<vN#X1$Ev-3b+yK4LF5PNs7+E=Rsn{hk^I@cZymchJtZEGC?E-zUy{H$P4EG+z9;
zD6Yt-KdsNQU2#X`B~?6bEb{FETGuY~<>V~7rnXHfh$aUMh`m<|KZMWkVJZ#|l3i*1
zSC&njXrAY?(~_cco)L=EajFbM8rudUl>0G|NKp~TVtgv{1wx6Ib|VUWUi3S=uuQrJ
zfL1dVL4b2|F-aFT?e!DEMg2~NRE9>)h}Jp5Vo*_Hk*U4JIi;~2f(iQc)VxgJ2`l+R
z9WMsiDE*5E6g&EL(O#X9{9wWtW#<duZC~G6zG3X?7?5mJ`!wbrJVi1*9sm}V*U*Rq
zt3Rus2|ml%hG(wrLVTVZl(h6r*wc?<bRE})cUKU?eDqPmq2=7y?FOC1R3e3NFJfJ1
zul;6pkuD-Cs`$aY@<FA!YazT6_nSbTsxaAY^Sc2mQ&G}y+FA*80&AN_44<6i;bjpj
ziHN-@L&nRdmwodRdDUhLO<?+kY>95e2=oQ6pzVhsmejj*!-vl!i2FC7i*I$^hO+s6
zw%hcM%HwO6vK=)<*_s!57#2|6@sEp%t?LfORz~;kItt<OFf3vB_h;>z`UinfsC<EX
zcE9<?x9=Rf{^9qfLOn>Au$t#{MD|vEDdN(j<I?~^a}V`JCT;sQ17EU7pkHX*V!aO@
zBc{5t_a$@oEnNchdnetbNVX1R?uiOVgZpA=z98=98*h00bB~g+D=59~6izPQyYaiX
z;}`Cr5Cw!25Q5j9PX4=v@8Ys2j1y@56KSo79EIs4yB47NdCuEweX=LP>v^=-uU?rv
z6ibF#-6FZtf%bn-?Y#5_rBU#qGiAi}TfN8rR0mAS=8NVS^F_^abE^20g?P{D(zNHp
zy4e1g<#O`T#TIQ|atiIQeT)K5F8Bvz<fz-H*0{7Cvkuz<DY&c@-WA`_$JQ*Q$My;-
zz95q*%gm(Jx4T2E73_SYKE0lUyYlwJ#mI+Y?RN{D$b{n<2aBCELre>hh><*th|Ds9
zH#|yO7XBg1tsLEizV#UyJxpG^;^J$Su$uX4ey@qryx9D&j%@`Z6JJZ$z0%aXzYj0k
zOpZlro0cJUTIy*Utlo~+2VJ3mp=u%5kIMonA0P3mou%n8eA11Gse49|RUs40(XTUU
z74;Qo#B*g{5FNS>6;H{LzZU)+Lf@<+<Q7En+)Glmxxn~>-_*NUb6tUN<2@W6f^xnw
zy?gTs(XmFf@8+J%dTj{Y<r;X!cvFf_#9=Kf6QjUDO+<6y;QD)&djZ;SF>h|%*^O4w
zqJOQYd;Tq+F;Mn8pV2{(L5@EmKE4-^sQHC94F-8DBbvvLI!LWbk{vDN^HiUYfg<GP
zl=9W<FS1Te@#q%&Y7O#2=wnn{so0v?-{I~Y6B1ItXHhCVugZ_Etq)XnC$h~yhOFbt
z>T?@gyuK--%IgIp2QO1k#HNCM1!d?1Y03nm1~Seo$pp9d_$m)`1ez8sL9=<{&8(<r
zxT&}bB06#<I3s$sc*NA3Pt<*pp~^C`>dnsRtteA!NA4j*Q_6-LJYNwiTxM)7Ez~tf
zYDN3Qs^D)kBP-w6O~j*O6ol{szi|Wy-*5|9t_n62@Vd^gch|;+nl*DOB0|Bg9|}{>
zdph@WfQDht#LzzJf<HdP=tz?;>xkRwsTY6OymrTI-O1`#=N6}rCDYY*+9{bHx<TeQ
z51okaa}n>Nl}DPzTS{HfB-6@)PZlQ+c^e&o8JskM_oo0{(uPq{iEk;R_*Ncb$MqkW
zhLbPJ85>J|e1mE2P0}R)K9qev3V&AQhO>3>=m;SCT|&*bLh=`QQoQV*YdmZ>hWx5b
zANd{-gkR^a@42Cc$oo#dd^^OMA$EX-SMyHZaNC~hsB>Yy;C`dZ7hw^Em+_^7<)@`F
zF)FxM+NfV!F9XR;ao6(OJr?lwfU_z!J>T_?jFM|-Mf48FxMz(xH`P{6!-dJ<i_BNK
zP+>^MeW7D>iD9D3NAFhcZ?%sqw8w|!49(u=7rP}F!u6b-O8#<Yy6P0=>4pMRO2U`E
z<3g93L>up^y1mh9jm^%tHBZ;qIZs^s3M@y;quooJTB+K;yx!p;Jgj`TA4QayVBXuW
z@<9pdW5d7g9-~|3y#731EQMWs|9tJv^r_L*7?4kBO7l9eRv1KkXYHoO`UCs{E=gIF
z_;AigcVE8rOfD5Oh`qv}l9)<B(Bc3{P|j`V%zxQluvFRhr9&%#VLzo<=&tF_l!LI#
zi?<G_KCx&l3lY4x<NNAOG`@c#6r^WQ-u3lRc1I8Ym{pMv-^N>jbgU{VMZ5Oy{{i+u
z3BS2!IQQHq@QPQzolk!JqbO|+tXg-OQpv?}N{E53u5KDZNazPt25LB3xap7A;#H~`
z<5R12BS5R!WX1C3oN)XJ+;``_OiYYZ>#ef<=;f&G!qG=BXV2~tyA;TCTb^eHh2y03
z{r`H}xntL0|3EhvJ^jh--#gBCzyAZi^6eke*W1IkoqL#=m|*GBCG_`o6Ey2I>x!P9
z8fND(j&fMBdIj~F8TJhiQ}R6a>>B2d+wVnmi7PI@oUy&5JiPH9%3WPdH+;HKtgZ;A
z4huz?ln@hdMx28M`4sb)AoyVjO5=GYnynT=5VS2Sv0RlM85Txl4MfR=n`Ymc4=`(E
z=x8LE97>A#*^r*@lo?L~qP;0R7s4jy;ce_W_7(I#aR~qBUoqW+k_dVic)MWSX)-1-
z)Zfq9kH3JuyLK==F~;D6#WWiYX6jQQ6++Xpo`mr-jfTOiR1krE`-drY)$qJ3Jw5#x
z6Jo*;$JLCDjdJ_#H{myYOyHyZ2HQ5>&!z`AGc|gE9Xt0jGCqw7rx%x;`YS4>vhoAp
zakRD*C~>PrDWya!L<gc!f>wx**L@m=R`$euB}!`vjR;07tu3My(P0=kf_6j<8WAH#
zSs1B9txzK3SbNc+5K&qi5kZV-<v4*t48|xCQA#1z?w)Yr(9oj$@7u{2KJ_KG@7l}a
zMGM%xZ8v?rQ=ERv@!WFj?d;mMm;T-^9M@%de1?6)<7g!;U%nWTkl_Od&|1;c)5E3*
zwsFrr595|9tnXdGjlaHxZS_g0R9H41@Xn=*C#^92^e%9G2pv0#l57c+%nGG!5jotV
z$s>nG)9zsExGq9S5QaKo;^?T5c=|jaB9ny~@m2<rmmxC@iV}Mcw_Rq%K*n*M+*2_(
zgWw*Z<iW!M>X<TrRk;=CmT{&xDVzbzCQTQ-y}NLC%n+!6CCgXv(1Q>1(58)ab$3%L
zm#EchOihmyL`H`1H!;R=)XJl&b@#Gs$0Hac+<p7ayzqs8#^Oaw*t%^qu6C%^y1DL}
zYtSf;J>djum2Pgo?QZ(|`&obdI;O^Fxa*$#amy7JFBuq7j$5v`0%eRiT8oGgjgm;q
zThm3M>@XIzQc6(DI9eH{Vsj5sN`oU&Sg<m2IKGRBQjQ218!9Y<(xNRxTa(fHrHoQK
z!r=(^9P&UZLLJQ$Dy@y@y1{$@=_9|Z_V)klKYsWl&+F^%qN}F|tu@E2Ucpn&Kb`Jc
znP2?o5A4{v7eTRS&wfTm##pgpIYHo4pPA;|bI#=6dmmtIY=WlmgID6j{)L$FG3r5+
zez!z_Q}desCNEyqU}gpeO2Ua{!$aaEo(&PuNg!Gxl4J7>5kYHB;D@vtEfm<};*@d{
zb}dSH$&8GcX;W1|3e7t2Jt#5@LtEFKjz)}X*D8fmLPa?WrJ)Y0-o$JD4z2;W&tYiL
zt_$q$0`}aAw{01^(uIgHF*#0mtp}y*gc9PqCH$7pG}CycGNYqoELpUSr#<N@jEs*k
zI=YXE>1oC%8~Cjjy}jMIj%y{f)|__osSFG(rs@0i_xCZhXgQ}o?ktupTg3hMKE%b(
z?q}DIU7T>@y6>HS#!27k)b{_+q(t~w&1j54I}RWC=MO)Brat+bkA3oU7q?mgCmz3!
zvrj*cJv(=D!upl?t@HTpAFgL)bdqYd%)&)O_<lgWQRi`|o=9VAl1imQS9i!{qsfVj
zSD+3YVAu2{uH(`hIJ~G^c-he{whg<OR>1LtK4UWtezdm&o|g(o$x6;>s$ZqdX2ixi
zE7xM(naL?yjd}t((vV}7aTiOD2=RWa$!e7xLdZ&So7_%*=XjpnZZeYH3?_bD6Q8kd
z8=*C#?G*QTl<7FAc7-qj{+=H09PekL>7q2g1K;V!F?M6}a;?h5%oIV>ZW<E=20y6d
zwtRfwr`huP!xfjYb=wwPx5TmQ*YlL8UdUC~|B>5nzlEOeUYcP@xm03s!6HsL`83A%
z?_tlLJ&cTx^Q&L|fklG@;5hX5_aF$3nW<@jiSg0HTF@|OzJ%!WNwFE!jt$#w7L756
z?%p2$^%I|c#`JXam*4%ym!I{lr=3f)(PC_L5)%ZRfA*==n?Bdxa4X&2H5M;k%%+VG
zaoq98&}{i^d}s^(14E2YPO)miQlvg(nOVDNUvojt@alB|dnX+p-l5pA%t3qLcw*ga
z%Ajx(V@@PpYoBYiN~LtETtO*?>o}-LLaR)^Y&jhexiyS4D_A62G@Q~YrlrD_j3u99
zp)6iDxd+odf3bNCptM0nQCJSC+*iON@HYm0EIf->pYTLZ_`|2DRyF&E4^ZE=hovi4
zp&UDj8U#L$W4ESK3bfW}M^kS#X!;?wYKifQQSQ0>PW-?|JoqgiBd}xlPL`}Zif29h
zS^W41-)CUa5{^6mSdKmZWcKXbO>b`(wQ3iOmn~y_qW<1iedde3eFO9HO+L!09rqnl
zJ|mzNpZ||9J$u1m@27wFi~sqn(;s&_fid(C3^Fn@O5pn}TrkAY&>*{Z?&7%PkD<|M
zuy^l%7B5-KLl1AIyQ`a0$z|KF-Dm~MI6S#5yk&iZk%s2ZZJHhjoRYy0p=1QlaWKTY
zltwm3R7J}zQZUj~a!#Vw8pm--JZr@`aglV7>^31=^v_u%vN)*%MaZFr6g!i_F4?l;
zJW-(n3QwUURpekjEb-L0fU6sv-Wp};qLA_+bkCG&`b|c5?4-MYfJ(VSv*{DsZ7^|N
z4-?uqIgUfMTEzrDqvIn~sx_MR22XkNlNcKv=KlNdqf)Bixn-1TapmQI;Ep@*q_2OF
z2kyOx#^g8?)7FRG*FOZn@V>p3#^k=w9CO@;8~tWe5Ebv{qLdv;)}Jb9L6nJhJrN`J
zz$JxJXrq-<MvSY7+KdyKg`$nb2Ax7Fr3BGRDW!}k6DtD|ZHUSgP!{K@XktbMp^q`4
zI4G^`f#zC)me8nLZ_mujUi!-VWtUye?{B(`*S+Lf92g$qvMX+2cx;lDt5z~{V1&uZ
zDW;~TY1A7G4h*n$>o&&5Cpl`xQ4B0yjMu+_{TsJ%N^_ETtrJ26w?AUr<G4^Y0b|DD
z`^|2~HI!9WB3c2LI3F_Hts{YCjdmM=)d~Wdt!Bc|v!(p@1{PXm7g)zTDW%Mue!7X@
zk4U9pA%#tbWc5UhlQO<(6=C)^=SLjZ0Z@n1I>q0(H{*}oz_^6ef+c7tq&`z;WcUCp
zSFOVLeT=aUkM~}1wae7>6wb&2rlzOp?dfIf=7-q7r_A!Di<z35rl+TiC5whQe%*35
zKX^Bn{PgDx_Vu!L>qc(9RTv!TV(EfGYPAa0N|{o*M73J&+P8yu+;-C+@JbcC<&_hK
zfTA&4<G31E*`4Q2gx_?eowOD_uSCgnF~%A#j#k7WsbV54-*GU;$Cwc9I`%9;V=zV%
z2Z7R&1Q3Ic?0=<Qly)&DI<D9Vj_cx;JR1=xg73FjxOfSl{O5P`$q#&xU;q9lTqk79
zj$N!-y@mt(53qahe#+GvyLRs3sH2v%anmN2FJH;3qgD|*ih-d8)JqL6I{kEByZzVn
zI38C&>|l(d=2^qHRQDNQdlXks^)h+j5o)DqN9icOg*XN}wx=L>AXpHDpzIvO^h7{t
zOycFp`Jg-cqq7n?)mZuI_KX1uQGkDJts2KpC&sspMxwwSiI_cR<ZR)hyoP8yNt|P7
z!G@7~1_mebJm?Q$`S=9>K$T|TQ=guq?0JMiK&j**VrVoQ5o5sk*f_nt3kdyyk<k%A
zQLT1!<1M#w;J`3p*ka_s0j}P=i!d})d;96?Tgt-fGF(^C%Fxx-O|{~p4fwu7Ih0DS
zgZ4Z^$3waH*fWVXFbqWqgMgObLTQblqCsXbB4`0e*9pXKaTWVxBU6Yl@_UAX5E`+^
zI+$q7ECN8`=y*ycHh7{K5fdG$7Ohw}CT4uwO<@??{hSrln?7rY2KeDi7Vx%j-ot-v
zY_M!Wjj_=&cJ13otyTlEN8#Ol&%GRf{PBF~A3w~sS6#^ue)<!}X6o$NJHnrxbsQ%Q
zbn(*%XK=K~x{^;zIn+fVjzTvBblq;;Z<Jl$nwwxsymyj*k8T?=C}Vd|G9s85a%7zw
z8HSbI)lRTOB|jzS&a)TYI8%0^qs24!1+o1a1Mzh9#6vPf+*)1D1Tc&Z=#K|i7%{es
zjg1b#J!gQG{>4=8x{8%6R&eYw$KpC3dv<TOgGXyj%g)|4TP<pVVf}_<*}wk)!+UqJ
zbm=lg3CA9@o||qSr7;<>V8Ky5?v#_6nwsRHNA|IP!znBr8sPC~K8_8?tikg<g23Ro
z9_32qHW73f`brE<h+u`02394tlybBQedV{B+K9ATzM1iT;|6|UK($10K*CTY2!cRq
z>%Vdwr9!mQh*3cphV^=@Y>bpb5ltvcAz~zyXd5lDZb73WgUFKElGll>q$Z-m$W5xO
zE)cP^he)WDNVQMc{x28)`#H_tovh;L4?M);!H_q<`Q?m{P4ly#UCQ3!101t%4IlaE
ze`R`V8e`y;6Hnv5P4^@9aX$UP7W`wM$SK~nOzKIl?_Wf36V^_Q(NHe^`}Xi=zlZO7
znukN7E1m|IH2gj0oj9f(z=mx^qfcpjOor#VDGNykddy{46ktvQInsd;=SxP5J^w>x
ze0&j8$BZp03`s|)fIp2X*M|Lbzwpl<KYXP))e<-XtwxDZwCy*8s#Sc|@SCj@&t7=f
z?Tw!5O?B3tbTa*YLp-we5q9p{h3k0`S;k=~1VKQpRz*q33tsSIF1z$M+;iWZEM2;c
zlTKLAefQqY-hF#HFfz)+TOVQ7ij}<Uuiwb@%nVol;S$PPvG$mg+4}Hyj0rj8tdpMG
z+t>ArR?|;Ol~I)$nng!8q|>VLiWIw$GbUd~LPTTSdVL~MV5eacf)_O##H*H7)VYVZ
zGn-uUxSy--zkbfo9>19L8mqZ(bT57VJ=A&@5Qc_jix%;rk9>;pnI=E`?QdAJVm;>_
zU1IaYn`nt**VrgunwjCNk2{l{H~pUXx_z7(hJ2tgPPOE+WO)y-Gd`D(I6P>q6xAwT
zxsui+VXIh(M)1*y9h0u>QtRr<+if|f?(jRNv=s-Wus0)A(}z3F6sEvF9z>CFPo=Yx
z6epPwX-<WWb6@s>)|oH+fEZjQ1O#~4g+#VkkHD=ENWi+|H~!m$zpJ=<M}3-U6z*Uz
zE7z`NW_*-tR~IW+t^!d6K|srIuxjNB&OGB>)~;F0Raae(gD^cE(((<CcGx#O%JyBm
z*|2^;7d`9QNZ4TSo)HEI_ObPm9hfkjKH;RbZ|JI(e=$8(Pw-cY+Bzf?X(y3_T8kT0
zBx-ss;m-oI=bw;VDe<YT07{uS0u?LavM~*0I$V%a1?PfyzPo(ymFIKWHT^%SmbhSx
z;^QCx5=({_GPLL@{`T+R!;l30<dSc)C}?r!_G!-Bc?V~^+xYOx75Hm5aQA(8@tO4}
z^O_YWap8S;vZmV0hDFmXU$Yp|J$%(S+@#0pBS5uLPRJg89LI|*tqF}G3_^?uO~1+L
z*r;clFbfm6Vd=R13<Oc+1VxrMF4)5CQhA9ab<~l>%k2fbVPJ&!VlkBM%c*ffyBNWS
z7rDv@{N$y^5Hu8CrTWl{wWnP7(c|ws|BqK+$-eFi6|b8=YD2xZ#?auPjiDai%k=a#
zU0q$=a?=gmdee<Grp9>bbI#|Nzq_9A|L}WB+j@G3aAq9B&~W8d*H9~WQL9#|Rl8WY
zpzq2J$E<p7rQ$s@Jv9>_FqYV?MYm6)E;B1IisUU4F?%mNeVbU~MZ72}-i(95B#ADI
zE&42mjMcU+RFSU5qdtS*KXf1O{Po%H!oT~%qS4`=Yr8fy|9i}H9=`edGd7gN%KAHh
z&g7jp@REi7EL*n*^ShrjtOC}QG%qVDeo*b<sJ<b7e(#-}`GhC%zSds0J-n0t1#m;N
z$`xaMd~yFU)A&?e2T{?ckxCOg4iac<#W#`5h%hv?0w33N2t#3NawatjvjpoXnX`1u
z5;0GA`>3sho7N>>eUJqdmZ-7gKiQ{4WeZJTq5_|}k|-!wYHX^HKm5qPo#+2m?-IWK
zz>RDKR=B+!Sk}jM&Ex(%?q$!&0RR>+T#N~~Fg-m@*s9ZCou+qS8BcxcMQm8NfxGU$
zpIdLg9)PK-DF_syCyb0w(%aXw`P9=-xF8G~Oij%s*y~`EBU!{Y>&{Ee!r}*;cu8JR
z5Zg&<h1I4Vlz_zWPZ`h-dUA@O*1a)&%fCNe0RzBWfh~95bmf=+{vA*H<>gnRR;;7n
z@8h1EZbnMWas80(6O%}57i*=TqgSmYXf^omBU`!sgeUnu$2A^!>MLGw?e8wT`dPoZ
zd(+CG@d)KG#4ovMmHM0GFxPAgBodNZDNGm=1_9+t6(t5tpmWSCSsIWsc8<WEC~Y6g
z3J-<CwK2HS28X#NFR^4!S2!ova}uOe*XBWdoV3zlLWZ=v{LOdVj(^VC{KbkF@XgCE
z!4D=_H&$lx<JYj^=ylxu$2%BYumEEMCdS8DIMhqMK8@;H#s@$8X*L{pJODqq<O=@$
zg->H(pr8K!L0Ul*FZ2jnO~kZ9fJUQbF&}Bw^B^J983&OR2P1KEbJij{&^WQ8vr;+2
z)@0RjJmIC2HW2-!F%8NAE!0I*t(Ms~IzF?p=@G6wkyD@aMDD$3JNMrA084u-eCpT%
zZYwWl|B5w~0+)LpdW5CRmvPVCceAKk34d_SHBSfj95pg?^^)7~Sh+(C+R=6!gJ^|%
z42UGDOIj%vK{X>n%Wo0*O-vACg1{lWRZ@~Ns*QGe*?A>Zk;r00>r%C<b2sBUW|_Hj
zU#kKW<Q~dh4^2p4WxzXY#j*U`wO8?v%{^Rv!LvDyG7Bd5Q~%=~JnKnM<!|5l7EW5#
z$K#G&$$6)3;DR%c<;)FBdH4I?&4%NSCx{N(oZNXIy|pepuf*adOKABmdb+!K<ttx#
z%SF$4#>aiX6>SlaCr->lX-m_4`5Je=UMw&7y%XHd(kl0@IJB}479dTGS5$PIu!4A}
zdxfARfY8|8sfcD;Q7r1~<J1i+S+Q&(3%hIV+PjCZZ5@T)#T>ulC}zfnsY;WoBOJZz
zXzsY}=E^_3^KCx_SUNcHu(%$9STB+1x=Cz!0)wm(kemFlz(^$%E5?N2x)_7TggV#O
zP8z?EI<KS>isaU**Ex>aD6H?w^@wERJF>)<&J`*w3NS`!G@6`w{^MTy-#_~9Z{G6E
zr*QS1H=zFIZ-4UopZ(@vUe>pg3$||Np7;MFTejXqrB-8bpo^|rH;txCr8dCuBU`xi
zzrW1JyRQRaYHXZ|nMwBT+ru3<-pKHt-MsA`Z++TdzU%F0o^|dyUu{fJ5w8o(GH`xE
ze|EwZH*xHg4!U9GK~q6G=M2L5dUn5L8&i=zfmISEnhF;OW!!27aW(bnan3&XjQdYG
z>BKQd87|*8%<t~o!|47A9=QKLj#|*eU%%roS-D~rOOIN?zkTjM&i~$5zx?rqLkk`4
zXhbV3{~{)~up+ZpIPn0Jgx*@&38SFd!1n`;rHuoHGdqi<mCpQ>h@r$ljNc^ys<2`u
ztM<r$k1g1^;<<N45JZ{$waiC0g<(KfS8ac9-_iG-dg>X^c<`#L2>sUnuIE1Oz31I_
z?NyuK{+>^-aT+W3oqSUF_<;j#zU2ni9d`=l1uJMZW~lWJas3rnvTyeuHk@=G&-$}h
z-na9>%r;Eu24N69?#xp+tys0<_kMGRR?|Wa6A`V`KG}tqM%N|M^eWm6Wp>QmDb07Y
z$61j{0{z-mDzO)#_(<00kPfhBrCLUshRLaEPCw=7ADnvHDW_d}*`?2`l|1|~M3+2D
zE-Y9u#8aR1;=i3X-qQE|-QWH7n)S!<-uHjtZ~pRaZ{?_?*I;hG2kkitR*mPoRcvEL
z+CxRy83e5r7{Lz%>v9VNqG{C5q|92>S&W?>G;L@gN6vWaJIa{g=;VHez?~3tCk$A4
zwyn;JrZ0HG)V5{4!<>BF0Nv730+iOQxOCmGzkB@gz8RdD7=HQQM>f6Ulntl$+;r=m
zCxj#WIrog?s8ky~|0U0%+`aVwHfClvu0DG4FF*e259i)7IWdM9lOFk|?2bfnd|)ve
zu8lb|`!dhQ^qtat_XA8d#hhT9JbmM@nO@M*G-7=EE&?_j1OTm_mRBwj_zisDr|ebs
z9COUEw*$}9j>2^nj-&Ckrd+N73_tgI&-=u$fANcVU31;_s;jS`U;Oq`jz8gKylRaw
z@bO9>Ex$o}sPZgSi5T99A`Ai?M<FIaDea>jzq3Y{&fhad&aMsP@PsUhXBjwIn&)%G
zqsg@0nWG4duHdPeEl2y8uxQ^SFt*t!pgul|Y0c1(=18r(_Y23K{)BVSea=fyeB4uC
z@aFzS>woaU4}6?|e#gsDqc`kYbKG&CQl9h6dVPlJ$#G^T$C;iSV|rrD4lk_}6|AsR
zw&|~w={ho>YX524b9HX#yh2c8Hk~VPtX8vU>{v-?g`tkV#LTSP;G)(##Bpi1?D>Jq
zR<EfnU$*>V4c4wunsT{{c3iu=Q+?uGfcL!beJ@<Lc!;j9Zg%Y2$&OvSIQFDdsMlw3
zqVRmJlIoBXaf)b$P!Su65{3kUp{rb?ueYR$;yLD>;&x^+dd_tx30>WkXmc>6%w}aC
zVx8jeL4zjxu0?0Q``Z`xYzr5xJ?qEKR?{+J!%lm*fL5~sBAj>r8DBl`{4>6~Xz7ys
zXZGFol4G9omoJ!_m>}MQ)o$fQ;yaINnOXoU^EXeBd2LpiRfTh;ER7BpGd&03pk3Rg
zc22%3mZRe1mg7N^NNA-(&vo!k$l!uOmMmSgWO#J!mZAOuCa0#Esn^l2#w*!#2~o~2
zF~X|VtAF~>AN}Y@-}zU6_1>O=0q(o^4o*Mq32az@99y<NNV#0e>AB7=vCM2RxUQz`
zxiplpuo`wDewV1qWO@{ZljKhd%#p*s;UH!s5QUH0nW;H*&*CyUbOu*SA;Am{yhjGl
z{fpNwITxBiNMmvg?WDFsqHMKhVr&HMI9&XkXMIS5r+uj2G>G_#!iy0?;^3D;DPqGJ
zGiFyC?ef11U33ToIXlU4u$(FU$y7S|T09e+R1z2Rr;K4&i>J3#=r}GYhnDX%F*a5^
z`skzYTe5TsV-Iem)oS57no7k*>~i~(2n5Y0=RE%W_r3ES?>yz>|MsuX>hB-o{s->h
zl#|Y;J~PGk9goo6(`S!(OZZUowwzKJ111O=s8#8yl$mxljYi<Ln!Z=6RcKrE8cSkQ
z+?=M_V0T{7{z=EW&3|P^nykTO51eUEj59egPHSe;Zd*V*3Ky~abBGwGC&y{DLc*Yt
z5HarJe0wE<^*UnvA}Go-a`wFmkrUTc_WHrw)`=vuYk^Lg;|`6V(djiIwR2STykuLD
zFHdRZE2ZoKn?{(a*L%Brx<^+Zy=pWx1``A*1+M4d`ynO_29&ag)Qd5^{FSeM-i1%Q
zXh*BjvYY>Gy`R(1IEzxbMx$=GQIkXj*ms-A>!9MQqUkF`cS#rzH23Wu*M7@)lKOWt
zd~=`0@0s>>=o1ZXeK%|7;*00E8BM1rqjw-}ibQ29q_Wo{Xb}c2(%#Hs;cVe5?R+9N
z+{p$h{?7W74{@;0*H4{$yL9Tj_)-S77rY*^Hd67u_~4~%#3Z1#ZYF_d#?Wju2LM*D
zS@U4rca261rCdDM10fVZDNVD{00^Ic;nQ#FuGQ%88)Db)?d;mIne)$kB3f%2jYc8>
zRHjy9;*HNii=pb-g&IviWO`;&r(l1+TD~*nE3QFQN)@ACikbg+Q@%PR{!8Krw8ULQ
z?$a*sh%FAtSXs#^D30%VnZlfPD5@?=QTRdk$)2aHE>5!#m>3DC`&Vc2kcwsr?OB1g
zq_ogTK&S-Ahw;Q>Xbip|bOWqhb@XNdjIu(>E0s}7VT{SG90eF09H^Xp;<0p9ODtKu
zj7<+cz|_Qk9)Iq+hzapqt*9F${Y*MR5JI+3_>B2w{F!O$lT+Gp-1vC14ur{cptNyF
zRI_LUO|o5PebUiYH3xw^r9+1r^D8!%wkbifQo2a&^jD0XB?<JAgpK2eQ%4gW%8XYl
z$Bb)YZ9b22eJG3^w@VK4T(T=sBzct*8-T3RplO>?MY&Uda5DI`3Q-y{8WSo+i3_lL
z_0bQy$}W!rO%Ot}RmUE19JeX1hqS~5V1%B&A$t1<x%IZ&sMKm)c;T~{o}M8LgE(`9
zh9Vc5QW&L}@$F7n%~k_H5TzVvmWFqNVD0w>=^$Vttz^F+DtvhKrFXV-v$IW|kyPRR
z3FAc#&OzC9P)O!)_R%Z?)dj84iRtEhZC0sX$T}-ECH@nwe3oc?36e2NenE5I%dVC7
z722+Xu?(gG)~(xc%c2DfXf|4y(BL{6?YbzfTOI0B$I%RrjS>VQ0|P_!_V;tm)mNak
z;q0@|p<bUV2t<`=kLXN$0zyP9Jg@8|yRl|l9>=X@Csv99OgV_w*^&CFob^4QbkOLw
zSQ^j51TixvhF8|A%hH83Xx^@OR7n6$+nAR0saR^xCv`etDLp`EJ}HljIt&H!4a_oY
z+NtULbdC?=XEikK!KQ+k05Nu7xz%gd+_G}zDw?e(XmDNo4r5FuZBtSizf!5tYz5qT
z*BzKJWWmA(IIhFB*Iv%rb*ovo?nI`hN9}<^5u3*JFwsn(ghI7i#dAI7w_4Fw2E`>;
zg+A&y`BI=^AsrG!AF^tlXUbMP4jjrhMkPjKYJ4P}-ie1|)t6DfCeK5*1eKjVByk=b
zZYzthZFYKf(iNTaWEoUNjj{kk$09moG!|lhl+$vwgP;hFK_v75x_f)}tzEZnOUrNK
zXcu&eX0u5c_<cnqTPYnVQItz%noXab+qY9GS6Q=W4USjh#y?)qX{Ve@S9O4y`ZP-E
zymnL&G#i+piB=Aw2u4h%Rk`M7ZQ6WF?5a3_XX?$Hp=X;|nGcg&czf{f%PN$Fu=XXS
zPR?1FIDS&8JV7&_fzI$H`dth{Iurvh#^3Xn@lkDNo0(1W=p5^(gE4Dcq=sNx_p}XK
zX^gQ4%d2!dPu8tpd!O(7Xyw`!>k`H$c5d=UYt?W(yMuPQRHD&rv47uQdVBj=yyz(Q
z?AgcOJ&*9@CtW}gEt?}-XHocJi0`-XTP>Qc1|)nZS<#fHjzTH}M>6pp#WZh*KAb4D
zx$2iGC|71qTGQ6pRL&+CtEm3-Z;ibbige46PW4h)DIWW)A9Y=n8%?RknSBsMEl<J%
zRU*A&_EyQ?OgL<oSXu>WMPLkJ7~~ZE2`8Lz)3SvND3x7Weha_l6NF(SjhBe%r*(+d
zNnA|1Tw?$JeeB({n*~DyEM2;U+wZuQ?(Q;AIOj=>O&rKH)55>N4`?>(=?Z$W#%Xr0
zv5nrd@l_k1PQPc}c88qiV&p@DCW)_@wnj)H4+(4L4YwG#8B`&n&USgxH<^VMMUTp%
z4Ak87bZB>R#AKQfv&=!`If^Pa`A``{F^)x!+Y;IOTDP>;)+ek$Yn?<_o^;A7zhAUq
zA<cS=lIMcf1b%RQT-glt2ptqoGQF<wyb{|U*+v)!EMB~ruATv|yz+96KW;52op?H9
zW23~PLn}>VW*QUPV6iapvt5!9Cs7TvrL2*dA&;etZM#TDU_F}nc;3vA`=N4@F&})A
zmDFj+D#@~_{YY6ov+qT8B^zCw9W03^I7~>DeJ)qVTo77jzulfW^O!{6ByMR2YpXmx
zv{Eg*I@=J2Ax6ZD3tG2!{jH0ZEpHwe9YMP;j_WZoHum^Nz1bJ<ogI}C>S&E%to9w(
z!w(JHwr{6atFUD8LZ)Ww{PD(XIQOh`>Fw>O*{s{0lMp5*CU9NPY9zZmR;)N@rDJDO
zWPx_3gbZ|R-wCo~Ie)q|&Pu;d_u|S*jFk!jK?TK1F=Ri%m6B&#m3cn8ol6OGM+QeH
z55`>WEKaDjOWY2$D|X1Nxo4rR6us&3gGHlM2U^=LJ_6q-X!#z1-)!NQ+{Q^KpLAQJ
zK7r#pl)Mtd`}aA+`}d#jcy8Km?aZJRMn}LP>Xu5S!k*oG*tu&LU0pR6EnLLLhaTqP
zhaTkIbIxaadK#r541D}B#4A@YVQ3FtGLqYEKxO{VE47g=1*fw^j=5B6w(NOI<4zJV
z&yt<ro$M2mVgr=QdRtRc<h>!}xcOkU)Yu(?W`h9pcFE-)m%?WzgNn_$*;qIm0U5V3
zMqF0vwjX;I{f-4!WE2uW=o^gKl_FuZMC+uJPX2=l?M_f$*<*5Iob6jSKOt8i?KDvu
zN9)AN5O;@H^4PI$CqWR<-PJ`;PcJv!b|d}$-8}L93pg;k9}%HkDpM+z2m?dQZfTI;
zf%KqsEYh%eD>WDkXTW4E<^Km$-#|OF<vbc>rCD+zU3yex7}fSjviDvt2ayjUQq4rM
z@*S+f`9h9E4iz|P{tmh%r9dV}yvLy3t}P3wlv2iVVjs0a7gma_JLcFM2Nx`~0YxG-
zn?C#Z?cESP3s|Gj(GFVcWU@;~&XQ88M9Xin?UC(t_jXe$S1`tK>&@45)|uyX)KP1x
zPuJ<Hb)&UIXaaoSM~Zwm&*tX@U3MZa`BIS3vHR)KNb}hyAX}Rp-$n*N;*%~usB(|y
zN{pFT6*8u#L#m*xin3RX?yU9>$2ct9$yYdr2C=k5%_4iUgEW&PXWiS)#Ns&Vc#n@5
zQ)=xrly(w-I}sx(r7)r4nB$JSe)YNy!Q|v5CNvm?;o;%s>3i*wbdKvJ?@re6iKR`Y
zQeoe|{Y*|wGPGcbN~Ov}o40WL?bmbBh0nkbLL^#ysI>+W!Z6IODJ+Pg*;9wUD9WJ2
z@^Z|F@ejrb?Z#gU8M61IOv$ALcqFhR(XV-iRIwXQlJeRN!YFr~&!|JdaoM)a$;^eH
znF{8YAIw@hprT+LMQl9VTk+vKD(TrQ4ADxpw01BUg1`sD8c+p$$Wm`__ks1t9Q*sm
zOdSLq?XhR)t`m*lQn6uZ!axPBrrlgJo`EH0YK5Y|zn|T^c2lcX85|s>*4@q3*Z!XV
zK8L4W_#_St@26U=q0oeZ0g=NYb3REs?Su{tokYCNS=M2w*uskw`J>b<%$A)fP}T~J
z>n38?{pBQADxH&k*h%qpC#;@y45=~qzXP;7mzwCGIlDKW%j~?&Ena=yX`q0LCQS^j
zRtsZ-5>NsaufV3axBup5E5HwYoU+T7t(zC^-M#B19ZO|Y5F5?eJ_Eb6Xj024Bw@*t
zMYyhm5r^Au{3GX`^EfKCvR$wY1QKAxBoaFAfx`+#?f^SFO6WrwK8GAPocW(inGt7K
zS{JlHYz%cMF_zz*NMiR>?p%+e$yFF42W>}M_qjTxs1I!Sb+jGlN>L-TW^2~)6^VsW
zZn{F0ip)z9f-p#AMtq)Yt*d)irB=lcT9jRvefvk*wr%_ANu8CdYvrJ|lQBDW;*Am!
zX6iE-gohvAOsnOybjf16ySupVkGHUO+aAt2_lb-Q?*pwcVG9ZE6ns`g&6|sIBDvk5
z?#R%GB7F~aWECZG3M=yroReKbB7T#7^{|~6h2A6*CywEWONx$rZDZ<AHpk&e=VW7<
zSs#u^S{l-NP$AIqwvCaNViqapNu{RJ1a`+%H$IQNO#wTuJL5VE6$*-wAPCsKW9NBk
z`@o6txuvl|XH=?E3deJ4HXDqLjIw3(R?6iPU9~D+rN%9{+{Tgx3+W#mqS<WN2tSib
z=y|z04|Y3aYw2vH*la%6N5fF;SVHX0$YAG~xsxnpxKj$B+4^N(kVPYjI-8{lGLN=(
z${}(5#zFkl(M?hSG>??(_QE?;*wJ|aW=&sE(9+7mD52%sqse2rk)S#4I9huc?9!`x
zV~YD9xa;Dy>e^^WTjSG6GC1RL8trwBR+@6T#Q69)V`JkiSU5;`PdE48cQ3c!aVu-r
zAH#HWk}ycmDlBTYcGx-3lo7!5nkhUSyxeKr<y1>NA(0pwna5Hi&@L*HVpC&PB}x3U
zCYr~O1)@q&3eY)v*20_2@57n0Kj<^@V9i+vhx88nqEt5L&Kn_Zrw#B=sqB?1VYRCl
zV?x3(zyx7QgmU&33K~vylt#7EMZ*ud>&^$3PmPWr7d6lbg6l;7pm>H-OsbhO0;y7|
zFg!d$v(coxt45{T%{A9tNmo~eqgSnGa%ut-hUuo~#Qc@oGIPo7gHcXrJr;ku94@@L
zO~Rzp+e+o9x?>QS`7O~9&ZN#Y%&Omn<>Nsj`FuL}jNPj*IzM#QfjcWYJ|tgq5w#y;
z63a{~b2ebsm`*mENsi%za;+Bh3=9$ahR_H>7?#CQf{bAo296No`%Sc~K)XEn;KOX&
zy7>b87TwfJqm_NH5tAE`MZ^^=qXP#<(OOaK>SFuO9gH5>!ILkzfT_tzkT4&dq{#C^
zmSoxM3AE_!>J+k5-^nwNB3m1iN@bDcclLcm_X_4;nn|UIxB!GGT7ua#LRANYAvJ0;
z+CuEwx<_*`=ieGj<a{XWe4ouGNfyM;a;9JIkW_=#I&@1Fl+w|(GaAx^qHNui7aF3o
zT?CPUiSY@xY~FG{fR0wNNHnu)1)wgNr`fiG>o`o$)Illw`+F#rs@!q=tqctguy*Y+
z)a!LGeM;p%^Fpv75DW1=ohYWsVCOlbo#KaP%hO2(tF)0>qc5jI;)#^>86nwpI5TwH
zJRFk1ilQ8h-;rb7%=K*EEVBLIS-^0ZWw!OJDoO!+Oo+r_%UZ)0Aln>T5jc^X$L;`X
z?BuCRnWNU#Gv41nKo|-t3dZxpko)hy|3ZLDwKk$14=pN^($NG78M~{{uL5|U%h>1`
zh)}Im*uH%it;Qs)R;^}oa@tK>A-PYo{Ln!t<w=s4eUMq=FkiCIzD`bcykEr5#ix_m
zz(jXNax{ah(g#zOZSi8X2gEFvL{^OzzZWKn=Wg4doDO3VvJ~5HOUW{gs1%>u>n6=^
zp-JFqOJgH~gn?ZxlE4k2*3(xX99)d=w+O|cwae7Z6c65e?~wR@sk^Ulk5{Upl-+zW
zjJGI=v_(5h*{@n_8qFrt(=!Y%SU}S^+<nJgbk}MO3@z}pwN9jc(m@5B*pWo-`Wn)3
zhPKpc^5me4Ll43boup&*T;`_&Nt|>A5!_iGM*_TXwf&uiif7_HvTQwj`rq*WbOw&I
zXpFYJRw}24r<I&4I;BcPp&S?2agh*20z^zH7Wjz4ah$N!)rARKND$aC()tAV-uDo@
zAKCGwuI}1|8y~8w6=Fhb5XOT`rQx|&9>ueWg6q0WO-<3=)y;yT1>AT4{fthHvSjI!
zDnO}Hp;WGLNU6wg1sWxD`<<A#NWV@JEFb^ddDLVZOy*kVOOz!Zr7Cr&6(w~nlT<9!
zRicfv|FgwsrJ5?Vt@wGcbg1zz^KgQ6xL_=!NalUfz)NL)6x^SajGAPpCF?~B9IbJ+
zWxvoeqo;HnC9XipxbigdnSYgX35Cb*{rkB4&fA`+mFliks@53A!i^Z#Sig8|d`p4Q
zHqtK$LW~JmwqyaVR+AmOcX7!NfAWbhef+~;*?jNqFGNxGDrLM%xwG^sUMuoo0rJcq
zZ3pwh)N`ejX){JlHj*yRr83t=GTapty=`daz8!4u(<lleN(DnB^La49aVQ%+W?yhP
zWK5)J_IF%h@;j2|smRUbQYcNRl|~eVN(k)9w3R5n5E0NyIX&gFJ-i-8xm>|<HKP+_
z+<5EFPnIw^zPqO@RAQom<q-Etyd91%)GY~Oiu%%oAwxq;7+Sc5yYIP++wQq<={LUn
zvp1b^;^{wr`|Do4<+f|Dd@s-+GqzVL6HlJaD`jSxQ$KY4d5F}XGiX1}l*`|~RH+@u
zCsoXLs>*g`j3bK-o2fuXMW{&H<)iTqO)`UJ=0lOv?VFt)<Q;|C($3G?J65$verZJn
zKTPte&@GLFM&Y*tTD}h=I$0~L1km-W<AfM{)_S?*;yIeo1l)1oJtsW$(8j;%>FEiy
zRybOd?&OrOUD7X-bSE(s@>@R5hS=FcKj7NyuHbcVc`L`9bS7W?)^`@a{1vbH$g5xU
zye;4O_s{?5{de5_67Uyz<q}?{a>#Z~w6~oVBXh0Fm@Rc&wggGXWMM~Q2E-~~vYZ?T
z>#7tQW~&n;kPJgg=2J4+lD;KlBq)kJp8ITTLl&0IcSf*NImrA3O_m9gO3pIL5F3dq
zUhI%9BVu-Iur=)w<St<d&1Ms0B*?9c7fgs!Mhu}C%AQNfb#O}__ul;=S6qJO8D6<k
z#&K-dh!BLvo}D5lnJ%#Jm&mo48v05p42qG7VTSkbp{v%-mMxEP{WX{K?!SL83kMeQ
z;I?gi=O;h!f5TtA<5d@5_{<+Z`+}!z{oYr;@J*nnRGo#XGhxQr<aSzebhyS(Zp;=!
zK`rxT@K)R-$@e@Q%yC`@POA)8c9LK*GbeaCE+W>32Wd*N%tK}7_BzcT@odXXnN(t%
zAi3Gzx*`<GeNQ$YQAA#jP-%tIc1tcBxhdsrzbFNP<BE|0tp!RIL@Qk7uxIZcwr_ug
zWk)Tyt~zCpX-lO+8cLcq>*K1ZBz_wD1_s#j$Y#PYV8PHLF2C$D0zc#%U;pM+n;yFV
z_N%YF;#C_rZW?;<p@-Ra<+WXxU3u+mw>-S{ynp!EC!SEMR`ww_<h5fDsCbe|lAx>1
zz08$1yqnLLBMf<onG`{eCp$m`)&4z;G-B?It{)8Z8lrwxL`D-x)S*S8-zgRAZmV@D
zhG4ufA@+_X19tZJMMhLndvwg#M$zmxZn`*fMU?Gi34Jgjh$&_3Vp%biMk}DzY*6tk
zc%GddZ?#%XH|l6*(9s5oc3GFLf)x8j@(qn!q_x8H9K^t~<tu468u-3&#UC!`hO2(P
z<XwOJe?NQ4uYS4UcYnC-319u{SH84(a1q+8@rloUdEMJy^NKs~z4ec;LZM3$zD~44
zhBxE)>sT$!wm7tKF?WAf!e`PUDd=q9ClyvHgUi8<K+DT2c`iGWGJAm^ltB*#yLH^x
zE*7PUx2El(4&r<cNe&r_9hqV(KCiH#&QuaN-XIE4aup~EF(zHc5RD^y{2<WV(?_*h
z!F3#5$D!%Bn3|YIu#0A6O`~Hmn8ZW3Ln9S2w}>Fd5VTq}nhjj-@}@Vve$T3-m*IFN
z{{1W8IOdIi{=zNNoH={>ij~*D?v1a1>qkHK(H}JY8O9q^{KtQOf5|g1dd`2o{-rP2
z@}uv3{bNCWdQGWX$uLQtrn9bCNjfR(KI`O%rZa}kzGU7^o$Y%?Zq_R{027Rye*}fy
zoYRq*og>tqeR*!cbin?H3AJoz=O<58mMU#TNpr>0KPT66XQdP#PB2$oc6R%(^bjFC
z0CY>?v_N6v>q?7|#(OAqz2tadbGptz{~*VocmgIcluK4hH=9jR4mfrRaV%7n7L<-#
zS-^!+ChO@iD2<J$Ho~4A+j;9--t^8-eCiV)92wrj;G*UH<d>K8rq{gskBy1Z=K;L_
zjc@q#pZ@sA|N4ekzvk|BE7!8^z%bwZpP#P$vsb_I?_Tke7d<#VKKg90QpRpGl2~3S
zlno!XbSiXaOuWRErqTzq9Z;~!+fqR-%-Xk^;?nL?8P5jE;E2!bj*}BNM}g5Koo;d5
z953tm{*=iM<(amT7S$ifkM=l8r}&Xrh-4_0UF91yvoa|Zi|?z<{iqzJ70Pw(c3^?A
z``e-1-1Z%cDUoWU85lw_8&5ms)Jscl3GLWHWsE^#C~I4et(jdTpY&9u?-SloI)OnV
zf(b*E(l|=vw;F8S{7~(Jr#}5dfARLWZ9A}UCkqxY=d!DA<gecP)}Kxc@B1@==e_WS
z@A=xdzjgAje*25({_{V6@R#e?tf#xHpI=^nt^3ATz2+AOc5l1LDY<y%vfUaXn$T(U
zL&wC<Z4_MS+?+a&JEn+dI;5gBpED(X$kg9yr@B=x6x5nr_FqVPB*Lt!K2wLJ`)7e&
z^Q&ej#*a!*ic|S|B+N(QVzzeiWyz1qoXSzjH6@wBpkl3I_hq)2R|q5^G(nYQvv5Hv
z<*Sks*HuhTj_g0?*bSdvx^g*w5TJk{u%V|~DU2~VuH6<);y|;wdXgd#N9%<7MZgaX
zp6lVc9<89s-hF$I1^C2gzHt7tpYx37=z-lVShR#+U49jBedFu@du-pX*8yN)!*R#`
z;vYWvkI(t~x4!YWVXKAT^!eFuF5{U`efn>|_SsMT$oQ?5rD`Q{Ht4pktRifzW|7=6
z<K_&k0z(``w#|7vk<2j$!>Tls+)s_5)c>q<l2ynX{Bu<$r|cgMAAF3LED?$HdPcg&
zmn8cD?ISP4DLDo=`R|Feju(NXlv3I;uF{tCqEnMZjFTt=o3Gn-Ll1$G;jxv2Lj!+2
z`Q(%CZ#JW&Ka|0B6-sCP&pKKqq*CvO9W#Q~_EasqC?Mqt?br#PAP7)Og%JU_eeGM{
zef*Q3bY8f9+a^}7S<B6LKEU&z^{j8)a`o@tfriizkTB%@^UwRlSHJo7Z=ZeEnc`^8
zE%!gfU;p*{Ui9$~f9UR@Ro~#1Yye+ok|*OMj-+yDV@J&<OXkZE9mQZQDYIQ2-!Q8E
zA<Gx}g`2sz&mnD7`yeUk(MvgSUwDDU$Ihu@#?C1#;Z=+hAsL7nq$4WC26$Sm8_fa+
zAOR}bBoQ&<Ws6s6si+cyFf&~r1jf%k>+GMKz-|zuM9>J1ig0igk8Rg18@s?lrGiH(
zD3{CW6nW(83v6H%fe8tta|(k-lS;LE+qb{}gU4TR{&~%vk8EM#qGjB1{}%q@t#AMA
zeYf5CUdM9@Lxb@HUiOMVf9)TxxnkYtzVO*^oO<Gk(lfMxpZ)TR-m5Ra;vZG?zWh$v
z9XuT!<2N#073b^NuNk<~vD*@S9E;Q9yjq0crD!;1-jU>ySqEY6nMi8nLRk+@Fel}-
zrCA3?H2h-0J)almpq?bsL$ZchEFMJ>dp5GiEh$Y4?X<Ljt2Bbfn6N0sCbV{&S`^0E
z#j6)Q`N`j3x^$skJ#P%I<KVb%G;NR`<))OfHmOSK7&BHF*a4=sCJaNuAh2}|LomjR
z+vqnM)VjKE`reN(IpgAsE<CXH;RiVCsG|tH9zOl)&wu2;J8u1`Tk;U>adTeD+x)sW
zz3~nI_wWDiE9H{Q;-glwZ*1mi0FLXTCDXXs;6+N~&eAzy-t419uqA;gojWm(@`#~E
zF?RxRBwl8v5~vZ&tk~LSmI0WpfBgCA;pMglb$&Lf?HrjhSU?poD>4u!g?(8<*)br*
zutTAY(%L8uM#6Sit9>>M9mh&>@fA>6y>882XPox9@kX<O0YVh6<KdtZsjQVw85t|J
zwbBHBz|`b))E8u6VA5NN$sS&>Xf+zRo_EiezWJ@w-t^|z-#vC<AJa24-1pEUeEO50
zdC!iAHof2RT(ov*)f)h;I{N7QyL!5qo}6I&maU8Ydi@0D=yYPGJyfxSbS+?H)!|+?
z<%!qXI!hTdPv_)KD)w}wI6A%`ONrS~Xxy%(ZJBA>L-k^`*%}=)78;U1aIiO|pIJB}
zDGV#-Q;F)21a#J&rxL~uJy-dTqrr#`{WKDxo}}Ee>!`AJ1cmP-^Z-2JiRb?cz;P75
z2|+ZD%58X*O6s_-MD~s`Njr=&xUNgtD_QuW6o@Kp)~I4e-TuLk{_AO<{PZWj-Cc9p
zy5%A6zHbws_}C}@Y0Crm|F!m9N>v+f+SAkhun7$s!|2Ee`}XdCB197_QGN2M1M^zq
z6=&S$Dd}V`RU6kKmdx??1lG5lUL{&(WF>XH<I!B<^I6z*7<fM^BdzKDq<fAHGorKr
zs4~o+sgGn%@5<dx`$VFjaad>jND5I3<7#&%)?$hf34>ffnu5U5K~oXnH^Y)3HGt<l
z@425`xpXC=A7TPyp@xdL93%0fWE&#_j&|%p^_lI-j7YLUBuax*IFww0(pFLf;h(+o
z)vx{TfBpCC&p+=Rf5*-({QjEj_{^ui@X1^Mc;o*7%K)yw_J((zcIx9f`~0(5xpoy{
z$RtEZBX>$!m0y&e`Rg4dJG8?UvcRIiT!2YDEcW^AVpg5WoSuV{VfuLtsv-j)44P#9
z^Tj=%4~l^kU0hi4ov~B$gDa+HoG+cKC~BXC{dEfG^3&bXQ}OC-?Fwj1BMUhaH;LFP
z&A4v0sc;d&1*&3%#Y>mmcF~1TyKl?p&BvoWJJT3zLzM!k_)PU!>L*?eW&7K4?E1qn
z@Ci*w*()QEI|Dn8#ITsUiFP!{9(Tew|Lcc8zWPi5{>3kR{i|QU_;-K!0~3=|FTQBw
z=4THr9C`$Ck9pSfp3mOlUAV%`!lgq$7h^I;VIjpBS!KQh2@adHOXp&iS>8oVAjrWJ
zs}*cxbDPvhQD)f_vD@BtxRWHAXS3Jld@lQ}q|U|Se=?t_yn8Y&sQ@yHkv~}-uK|e<
zXDxz3g*aLqN81@xr2*}wwGco#nr`hlUd)BsM8_3A|3%OL*RHNAK^TJPqLqV$(LmDq
zXv8>)v74)B*wjv__&$Q*xf*;w5u`<{LMeqYf?sc-w0`)lZ~x0@eCNNu_r_;D<LP_1
zJhGXufBhSk|M|gBjv3y!p9k)}i^+ZadB(FYeqOcKH4(Og6mra!I-$5(ljOT*cIloE
z;K@U58%&fuRN&V5ER>9WWV6l(=gyJ-<Rw*-`)Ds;$PE%bYhJ6@Q-e#T-IQp+h>1H)
zhi0gNRt86dh$b+CN!)gc7V$+%U1^6P3=zaAr4VDd;KHYU=ZQ}`Z+!p$VYK5VbvMyi
z$n|tG$RY@+(g7BR0YMnzY6mePL1>ScOWT<8LsEaO@f$6SA8_39Cw%==pa1NJfBE>o
zzW<_&pSsaiA)7beiTD!}uX@ePUc3D0RhI|N7NR;pjv}PUN#jUm7MXNDC^}~19KkbR
zl4GhP*pZMU!rt-hyJXe2YJazi>j@o0VcXhUaN}jK%_n68|8rfOwKbB<(y_u>8mFKu
z3vH}aOs3f5^NtbHiI$9%ge0!ZbDWmec0h!o!I&W1P*4i(`QkVVZIOW8<-gUWTCMWD
z7ryW_zy19+|L6!fG2V;plGN)Z34S4p$P0~asG~K_phXz^Xzf^UOAI+AZgD$|O9qcI
zgpDR%r95%&6Q1zlbD!{p4-fC%`?$u;bZzOfW%oJd%7LKiC;ZXA`)J{NmSJ;yUCd@o
z=4qQ$wT+phhfNCilCqLRej*Vchb!2VfoG9v9qKb5X6}^lPjTtxpo%Rl*Jvr!HPvDT
zJsA0x)2Z(m&P4aJs5(9*C|3vjUf1!OuF{qng(%vNNT>=3p~h($V~>we5krHO(rb@7
z_VY^?Eu6t`p`#OrQ+mZxCanrlKvMQRG3)gJyC6Xm1kv7hIl2^RE^*s!dxB<*pxHt~
z!-B<&Z#`=DnrobL<$&L85yLM5YYDXZkh9m6iZEf38Rx*sxgGZN`SSZUtE5mRlAQdi
zvjob#cRp-3@5KlzT2UbLf2LE)c|fw|6ep}yc34NZ@->2tbdL0HTv(DhT_7KA7#uJ9
zNtikRdR!+!D;$K-2w`aQ$3ZBJR!*Q%H0<vBelp;UL1}%URw)mA+F7ZUorToVqJdlx
zQqpeQ3cG2Iy{-jHj>X`Z0N-yp@yiRcuU(=Ru7^PYLH>3&6<s)Fsggi|j*(%VQ(o~E
z>KZYuZLUfLP2$#yE%SmzlkD@I-g%flWySnv7K_iu0sO^lg$GGTWcxeXhkU#ikmO2x
zV`Hfum8qgu<jQZWhv!CnL>nvaO4+;$1jlO{B^U`%O6Ru$6cf#QyLL^Xh}DuNQ%9A?
z)x<NIalMohjD$Ga!E;=UC_<ACsx(qjWnfF8*|SKpPOWZ_<&f;;X-t!O0Kh;$zcNgO
z$<jKc9WU6vNTsi24*5yjl&xX5(~Cj<2{AY{h;XQIA`Q4IGD-)!bil`*C|A@tNuI*<
zsb-HUBnd!Hji|ZX<04HLD^0ahIEwT<@95KWRiH(1O#n!4Ge-oYTsQDM8?|SmP|dj0
zQXCy?AUi}8qfms<7~E0`?K*KRN4nv8Cc-nR)gg3Ik*Rg85|c7AM%SSxm7R$zbY&7F
zry|2gVhNd-$ngNrMRj!YUSyf+5U}#$!i#zD7@B==;j{QXy^_IJIiZlzPuaL<NTm6}
z+M^w3OgkQq_6WlkVc=(!r~oSTw1f_ZAP`i+Q6PwvDrLW1(kKiljnX==I>{bW5!1<@
z(j@|}>rtwdZD_9%j4y>L$GA<isNne~6$K|H(RE4vIuq$&tdO87RlHW1%gW$MnPou6
zA)~R@NUlfHA>Kh=sY2OpZEW{q98Q|o^TjNg!8yAYm4qph0*cFQGM)@Yv?_d_9dERU
zRthf)vKN(}5ol$Xh@eAJ(W;irNm=%%#?{JbW9&*A6~%F2*_f<%Cuu@P+D2Q5d9H`n
z8rRWi9c^%=b)IJP6{ML#pZt!VPfql-%q4RcItP@A5u=V!8O4c(w6h|IQ${Fh$%Kf`
z_L2x&B|{;0IZ1vdvG~lRv0vR``LxNCGNEzie%zY2I%fRJ$yP4PfDYT4f375g<GNni
zbt#)@`dSKyUMh5e;|dOeX(3|D_Ifl3MR2@QSar*|NCG)xJ0gL<D$=+T*ErhT5g`mi
zT*tvHmGHv=Q6}#$K2-7+`84B6(pfJ?j`KTsKk}6*NcHro6gx(vHT_N^wPL1DjDmTj
zgppGSmz3QGUk}kxEWRoJJFigBLOFBEV^z448m8F}Qp7WVdDs!p2+pq_pm3B>b)cj|
zLeYqE^G2akXbH3u&?Z2MspO>}gi1@78&YwE=o|o2<eamTVyU0-fL0Dl1jli39LLTA
z`azyRv&o!9RFZad@>!75kwKXpm(e!n^+5<1S-Y{B5|xmkj`%GK67NKuBm15?S8x~o
z#EB~`!x*ab?)=$UjDs<E`))`vL{TZcIY`QCgLny8n}6G8%uDGQPUP}RLdw|iQ|M^%
z?7;_^WawnjV-*eEgoH+A1Y5+07Ul-pA##AIvMPY2rcuGllCZ!9Uu<lK#s+>QY#sHh
z1{~$s!#P!S3KtSBjZ>7$6?ArS_FSaRs_giC3MX<xH-@IMN4^tPI>L{<RXbZP;!TKS
zwUug7$>quzi^&Vx-<SDOcuPAoA4>d1uGXCfK>RUBSxLNa=J~k1xi+^{ab$eQLL-7j
zl3J0tZ4a7a!Ij8p?X+A+QF82h%OGrKBy`Lr6(czKVSq7GiZz2oQqPF;`<15GaU$=x
zu`5`V!X@@P+rJLrqVUjoI8ndbMY=)YW6wWSvj)Xwh@MulD2-=%N)n?mdnehRtGxg_
zFe23wU5V9C;$V*%DjKmyMLx<zOQc|-V-;m?sX7;WJX~fz9QR+RXJY7J87hszDEg{X
zjWbJY#7bjJs!sZ6t~%NOspCLO;DGTEF&HD&w&w^9q6mB+k+6XL!7I7GXi3hnakR2h
z7=?>YV^X4~Xaom?gG5155E89c0Yp^fht5MAs}VD=FY-Z_R9PmE;jc*Iwo64)Y~^;6
zE_o_M9B!qo{hEJ90a{c73u1+=kQBEcV#?Um`F9<L0a#?R!yO3O?;`Q>#3a8vKNBx*
z%?@s>v^&vqKB?1@4GyT5a+pG+Buw9=QsJjd&XjT#q4Be0Au;A1jhP5s>f)fHy`gn%
z6zXJ}Ea92>s8ESrcSdNon%J$n1nuaysqb99vzj<Y3b7z9^ii=09pR7yAn262gL^E&
zI4UYEinoZ#rlNhGqe_HiphBV((~tSg+~sOiY}}vdnmd$~TR0#oaEci-zF$BunG{I_
zt1C0OTH;j=q^Pv;<ZRkY6^IJBj&258Gb7-r5NIWkBhKY0$G5hELwu-E_I?>*PoSC5
z9<H*U4r4-461(~=9Z+^F2_zcWnotaAD0wAZ*Ch->j7fxjzTPU8lkIkT=QgLB$W9))
z?Iw2Gn2eyw{j$)5!X0}r-e@W{{<8ZqrlllmDw_Y+s9C4B=Su&t!$cFmHu<_H>Qj+p
zYWoaHJKIy_5lHgHwC!w^XJJih6V2Wp&vh}bM;L8{E@DGBvsyqqj&YPif)FvrEf(jw
zP7pdSqV3*!A>bocctyWscdb!Ya3!bL0%a5>$BTAB4QRERsqL2W3`L<&SuP{Vmr^Ua
zo7~GVn9Hm@6ibj;H>D~iXDCZ*vbN9orE$*1_zay?+%_VK>nN5}tX0;VkeM)fw0zD7
zOP%6cW|x@phAz-fW|c5iBA=B+Mj#z|G=(+s?^!ZtpK)Dq9gNZ#qYz_f0<%IWR0xiX
zNPrNpl}eKl35|BaaqVod(uB&c7|QKpr7YYs2w^glX;0t^S}jBj%I?>Z8LesfXbw|L
zJ2S_v&4mybrq11T9Aujqy(Y_KnXQ}+@oq_xic~7He%t*qW)6B=_@Pjlv4gaCeKB=n
zp!ux!KAe;_{$g6i--?D|`+H)2RDg2P;7i-CGkM8;=5=JgPIAzE0It%$12hQjfj^NW
zJL^k!1*Jq0h>u9vYI`3v10^W!pwa1OjWK}C7!8RKQ!3%17*E?(<6sZTh|BJP0V0OY
zQch(haZ#{l+nce`GoS5ZHCsd~O;usWPm%=`v80VLb9~~fL={pLHjs(G&%%2-#`+U*
z_Mto{@%u8>imzv>IrlpxmoHfepdw)qhc$FmOS27-;=S45?<zH;9T#JSFbFWAWZWiE
ze}*Oy(;{dEm_WLVRd*amtSuA=MMa1q{+D3PPEaiR8&y$j50R+Rvl)09>8!H9587G^
z;2el!DAH;RCRuBpqK{bHWji~J88|b5wZwQiHJTJEk=%#EZinKDI8?7i+ayQ_KYWhC
zJDVPJydci45u*z+<MXZ8LEuG3+^KjwKnMkcR)PtIz_-zKS^s~aln#s_p+Q7?i?7p;
zLOD(}AY-ybJ*gsEOXR(ZReIdCEJTbVEVb+8gOg@UkzpMR!B{ww`Al(x<yIGw4qFqX
z$R@5+d?H;@`X>3axQ0$pBO~n(!e_Gu6dmfasQIQ&`Ezih1AU@gvzC{7IHKia0;qV|
zRQ#x#wTyguDdd|^UdZfOsBo217%Y}G5_T2etd$DTCBhIeX)H&aBs4w(p5tZkeH>q>
z5(XE^Y`C7*2(kWQT<szVj?yU~Ce|%&V>`>V(&2jgJ<X}(nZFd&sKj7P)~QH3wVAaM
zb+*v#1Vh}A1V$W6L_|BRI2eN-O5SX~tQ7Bb7*NjWY%gJsk(rq~kLx5(nqNg;`8nb;
z@^x#|&e?3~@z(LK4*A*!N^3NpHP(zhXInB7$x(>wx)@~$C1^7WwN^o>iNYc55-aP~
zkR)y+t%D6M6%!k6HYf^ZcUHGMG-U#$5?owtS^9BMn<^<laAP+~%)t2*Akvy<nK#WJ
z2XyC0Q#v)E5N#W-rCq9LT`rv%DeKM1Kh{3gd?<{Z^&!tCopbkMu1Y8@owz(T@{&mt
z5_}o`U^bT=B2cP=+un&e+#U<Gbhm^|1~Im2@pfQ(xFwoaY`=wp7uPeco^~9gHJH#x
zOxVUhg7QJ*XeZe|BDMpw$V`y<h{V(!R*KNXds7R>1T_8n98=$gHfAp65JYlQAqgjn
z^>Ub~fhx(Bc~qr)lo>KhZB)8GFrQTZGr>=VTp1&=(*#M8soUQ2C&G$Do|K92XRX-W
z1y!JU3@;+aP9%jQam~d)B@!gHD%#NR?7HHml)3_O$}O~3I3)*Fnn9OG#4U}X+;OG7
zvN)v{cq7;@Yzb<L#P*2>O>a+M%davuqp0a#>VA;f6T>F$cr%XU01lz3{E8Ku!oV1m
z<A6k)pl2j#+T)ggjIz6xTH)>3mD|3Lqg_H1((?Vb5j|J<L82p7OmCH=ACZBg6u2pO
zlaN6HVFdJ%n86}7hz0ki@WQ085KLy@wKy3H{oO&u7aP{GaRqqszqaXOA%FXOq;Nl`
zcVT;hI6^KL^HC@tg;dI@`owzYhcCTCZ@P3j)qZdkxFv8Z;FQ4eKn38H!L5N?fl{f7
zQ}OXiElQO!(cYx;Dh^J?r>AG8FDRe(mbDMiaJR8(IAC<*bW^N@iO!9P7QMEeRqSX-
zOeE125QJgQW0M+*iH=A$xv@NC5_?SHXgAsZ-|@U6V-U3byvB~{RK#96u8vm6#QG{;
z5*44~9Ir{pGAl?@v3!R_$3$dRO(Bmi^x~{rZP9s@#(C$H@6k?DV8;AwV|Ws^Jd4?q
z6fNUNbu{k8E1@-m?j>)$LtTGqjo#(Z@T0pP7$2B|Fo?un5S?hHK~qM;GD?B=2UTD|
zyWrZT(XInWFIWUU6C8W*&FnDG9BA>>XyZi_x5<h3k4Er{_0x_MDDBwkZZa$PW7lS`
zG3jc00Rjmqc^+NeU4(&spWkda$zuw4>*g&l-o0bjOLVBKr=ES<8%veaE)yDJ_bxHd
zWt6`4rep-YvbxFDnUZrI6!%YbKY#Xirm>{6e42wyq|9P?74sx@oW<KQpY*5rpF7pd
zMgYeh39&?Idrcd*vRxi;ozt;eu0l-?pP_c#Qlobf)CPeNR0t-3umyBkCiZ$j3<OQU
zfG$C(tpqo%Xge<jCen#v0Q-C>_drjBqpp1asja6z^CB5seyQ>;gSlSWca%fW^pU`%
zkRve~wNct`nvN7`qcqut;)!re>@kDV3fFV(hKzm-v`ixm+<VXcFS+yf+uyxs*RItj
zgjT~)?y9`+)U!_e3qq3;H<`Gx+^Q1w-;S`|<ZF~iN6(t*TD-(5yQC_9CdSfnKgQ;9
zW?z)~r%qy>gEM9)1MzTEJ2R&^*+!0K%g-`r9!aJQOe9X`UM!&i#vVC_=?SP*5I01%
zd@#+3L9MjH>9!0`X#eXn=n9x=?0#Q9qRTcS&dgY^geqG}E@Jm98r`d$@4o1#=5@b3
zRdo+N2w+5XC?S5(A}~QRQ<%;jh;b0Rje)iU(?oQNu|xcX4IYh{NeNmx_<q3j^c1eE
zDV56X*fqT53!nbN<^vO>{q>m!C9eySkiC0$F;kz6*)bKgiI*%pkg{kx=1hf_*u5my
z>20x68knCPWGU@D8e{K-x#MPKVNM5^T1Tjmt?N7|Mdn@he3D9Wd;7Z!%cSBZQrWGY
z=(H4;4kEmB(g(I4$J7k8Ks6>2Ul84c=&BtMUJ0-#Ob8C5%ZOCLG{6n4n@kLZEi2HR
zs@)UXb3k_i2D*S#J)DPbtT>nc^H<`!i6XS)PC!ii_HdfOqNx~OMXFoH*fnJ+N%y9<
z6j3UQ&I{05;cCsq#B}$r@yUKXmwkJN+4Arfn$uGpzi!RQ`VAYt8pD-N9G4XwI=4ry
zt&^Khl(d8J?C-?I6I~FcNRMz#vGZJRu=%7v6<!>QL{F~)WELqz_C$8qfGB7FQ(1|W
z5;W@sox2)<D5aFd2TP1@I)#}!EU!XYqk;e&flxq22TcYFR0$Ot3nhZ-2yQGyg`*HQ
zP`HRw0(=O4l<$KCP-@w#F6aY2j2ax;oHzo601QD8U`$wxs~D3~Yey6s*HO5Rwx?k!
z9i8<Z(NB}O&n%l;;9+eJi@F`p!O;%A0|RV-WIO)Y7$=`{(%v)9Jmr!TPd@3#%T}zo
z5yfQaM_VJ2ol4J&%~)P%HK{$L(M`2x3g(MAIesQK9OJTM&qX%(p<v#_g$sx4vYUNb
zR5XQ~VQO;BEYNX1pF*h+!Lbmdz361T7uzb)o?gmvML~^`EvHd|{Tqk5f4@(UXYibm
zvg=UtD!AfP(oIUPOU2WaT!V5;pj`0ALARnkx4KbGfexUn2WEV`%TYWNRxQEO#mL$x
zUJ+N)(JF8phrl-k{{OGNH;=dMy6QW>dpN_L-n(zASEEW(No9?eWm%R78RH2sHpUKP
zhy#HTpwl#bI$;Vl5Sny4bV49$rZ5=;#z2e*j2+7c$u_oSYqYGfN-EXx>dnKQ&$RdM
zKlVBI-dC0f=)b~8=OcaIt9$Re_uO-Sd+oJ;>$lb_d1@wse529mI_J>N1J)RWF7pfC
zT9><3`E9KORf&tlB$HT=>qK#lG)dW8J;(RF{kwkat^fEtegqg*=VJ3>pON%etcvt3
z(~R5%eG`!DaZf;=8^`<Z&LvT;xa7I7_W1h%`TtLVSOGb%)eu548utA#_AmO7$|rlS
zCo0!s+KVV%jZ0Vc)JK;u!nv`^&6Pj>yC?xgajV!qRYSq=ecJKg;}>##NkfqkI!o30
zQ@Ih5u!KlLVThz5k`N0+tPGKK1WFOR9PPllA+NexvUnhXG=~_7HK>EQ*0HgL)<G?c
zq8eeKaZc0#R5>Q??6YTIcKY1;udl@oiX3ud5YpmAQ0-^Wu_yU*En&U3Lkj$imM|pE
zQkECzil6+6ANjT`uD$j>;6Xf%spkf4_3!CVdXAuQT#@}%P-R~V@6(yJujIr2y<7?@
z34)*;6*l2z_FLR)hnYMFevplCEU4ICU%hQO=wEg0$`gMAjyy}LntPAGqjN~52*ZG}
zWpI#ZIrh00lzVQSjSxbV=itOd|9k0u^BdmoGbh=50=gj^twnBr<qgc$!C4E=2U!M(
zap0^YGcd4@!WgXa)gi_htTniz00*gYh*WTE>nRrXIT#cW0a`+I5K%k)?AQ{TT;UwX
z7Bri+4S?127jFNXd;az(?*7=v-*WwnZ)UFD#046J#F(5Q2q!Vb7<3NYq{h@%c??$;
z8svs7NjP|5KB>U$-HQo~r<)1yzf@EAc*=&48%CB)$T$G--k|?upE>;ME$8?>z6_ZE
zu9-O@1W_C#gr_X~-R`m}@+<Q^ZwttUR3j;6uCz|2l&LXArlcGRDKjBtA(hMo!el0`
z<yk%_rCxgAv-keqpx?cIZvMd8JWto!i;HK(b1@JO_I7sK#+aJcYUG?KW@cvlK_n;R
zw9A~YUsSeSNBb6&6GCVx3p(~Yfkp@+OSi*{y{C_p?yx(I=!uwE=9uoNv~FS?o9Ij4
z#0m$2KnW0{nhO{rq+sMUhiVa*&1bOJ^)y~o^DIf@iZj$|7shu$%aH}5C}d+}_2pl9
zV&!)~cGunC^Vn05aPjO4*WYjwRRgIdS_({ICy*K&mGZ30mb=Dz7onOstEKi6XmRxV
z{m>*yTgCAn?2p5$J<>6?6HX};r^_qEcvQ2X8snj-&2IJNSA*rh58%Jt;hdjoHx1&w
zot+cg>+7$-c>e5Lw>CFkt^|<^0)$j#Sw<8_D5c5LgftzZlr~DLOh{QMtx_RmQRG=8
z&-0cL@XVRB2%-4+T_5_CEevx@i=UgFo4-#fHBee5Q50<(hkWXZQ*XF%=FA<|n3@iP
z5%ElM$17g?tH+KW{1azPE|p58RD&Q0M^egEDa~Y_*uJBRZoWwHGyRy`T{%ITb8!&S
z3+v1V3YSxD4r5<-pNj{m@#7^3s@=v4l0q?8>mWr3TmUYED2Cj@()Eu_FXJ>VjtMDP
zTwLVYr_aCQ&))aRSFEgGpucmGcC*dQ?A-3&=9#%b`60B%7;k-<l-E@*nGlndoCTaJ
z#coOv1OZuL7!H#_g+8aJ0u2_wNQ8&1o5qcscF(5@P{yIo#Ci)V9=dcD+~12p{_@9H
z@_U64gi(Z)ezVxy-aNT+@#5F5UO4~e&Gq$Hj|P35aI|LH43h-Y@1cSKV=SY7k37%F
zvy3Q?P&!oB*_!8VX;sosr6ge(vaql~Q8<z;!Q?qRPd#>9p69nosTp_Y3<87{%+A!&
zfhN!MmQV$c-uKC$edY_bpN*mrAuvkmL6#SzIF6Griuyu|A&5bs!;TJuo>D5&K`>BC
z_obAHRBEJ^?h7GCQmZTo!>+MtgIqdz{{GhpX}Qo5q;V51ESYoT%4*o3X{~k$FGVPK
zit0X=uPKaRAu7NnU`GD7#v#nl(S7RF9rr)=$#-Nri+6UmU(ngPcw;?|5mK?$-Q(%U
zALgnPm#44!)*pDso8R)y|L($0=WW0G3-|oTdM)($aFfs6N845BD9Rw)d8Wg6?RRLU
zQBu(9^~GPk@53KIcKKyb9z3{w_tK%|UsHkf!#V|Aia`&{sa=2y@Kx|9#xK-=SGC$#
z``R!08s`vF?gMdeZ}-Zr_4PMC{p1sG+S%NAov{`jgftpW=9Ug%9b`#Hz0oE~hFEI|
zv~SNEh9OEzhW$RHVZXc<<u+Z7=f(Td&88wrQ<BjLRdU@y5c&(R1W{Z=DK(ycDwIGu
zg)I!m8V1&qq$8vdN=P}ACFu;#kr%lilrs*v9a3ul`ADSli=_gb(i*KbgUoSYw#A{{
zQ=l~G6NQ_rgDJ)aziOAZk0J5DOfqIums*UUlgvvCh4cRhK)neIi#+t6zh3%RAGq)B
zv&S3s_I7yb9oI42YSQU-xuHGt?9cq{zxlOSz532S(zWm+z&-DM-`lj+IH7UVWR9yo
zu>y1DM^_8XkHM&b7ijNxBt_1-3u`x>KfijDQhduR?tIyIp1k3@S4bssrkW}4roPa=
z4=nvIH`N=%zrS}m;JKxpQ^1^7zI~|x@XN9gC5VG4M9Bbfbar=+udlAYW$nVsH*T!1
zzIJP4m20lQk!x?djg7Tcgmk!~U}^afmtXS&2K@n22=Y8<H0+~=MCgExl?zBMxZ;}Y
z`OH0cVTzP6j4`IbSnu#U;}A*`gb|HK6P(2q1<OZ{(Q3_7t2bC%U1jC$Y3hvz#`s=r
z&N?4dD#n&O&oXjrk+N()m}LZEL@YgMrIZM%5XyVJrYOj>3{&JpaZC_KB{vHyidc*i
zM6w2b#YU>B&DL?o_+HE<yCPs;T%$zAx=dL`7&AA<IU*IZtaibU{A&USaSd|8=fALF
zPo3XRu4x}g4=*mSUw!#C^$VvzcUf<Do10#6!v~ICbKNgh@A)gg`pfq|bAIh5jfSR|
zNTgKwc>n_I>{Jp=Fx}F{Ie+bt7GX=bLx8b{#ia!{x7K;~>1UW*SftnMzWms+W3Owp
zXYO*9{&WhD)9U;&-u4^p@pBrUTYvFf$%-!(0Deg;FCdEIi6!prEv&CxeB-$@Pyge+
z?VZ>4dOZ<@fgj4Kl+X7IgAk5kzlSvi>le-=rJ&YmF&GSK&CKA8VPkg_XA1iL4(Vvb
z>dHBkl*k|=2t(ppyS&L7twRtFYYbW|f*@jU@c@lhi*rvuMPB6G{;JpT*B|WC*;%LF
zXq6V%FGQ(*qro&uh@zM<j3`WjQksKDj}wM5alM9Cnqj|(GoCT9*5I&c9U+9Gv%AHh
z-$kGh0#w+fWmh3v$L<MsU7gvvI?m*Pm{{o&tYhmtx$uC%mB1=vBdn7&1HqEof+Y3C
zZ~$lvJC>{8@J~no>r2{SSeQ}gu6@CY2b;6?%O88-Z@ynzLz<4p;-vTd*`NOLr|<dn
zOKyDGD;cevMhl;v^Pe}l&92Ncj|YE?$>V-PqCY<;d?}Z5f}Ncmwsv=@HCsGz-~C)%
z`MR$^(Z2pJsrCoy)=%ad8|6#q@l@-&I=-aP`m5!9p9{oc6qS}3dY!!kYZoqj?U_@j
zzO}p8d0m!{nsGg*)o#;jw@H%}r8P6{jE&U|y1QL!%?9ncd4v#btgW!}sZUU=)v>M`
z<cQB|VUSXdxAP!~$n%^qjF_2iqjlhCRa=KEaz?`*LIl*CEqc8@o_XR?27^9Az|qUE
z<oa7)%qKtkLDDq!u1I-<a%1T1?Q!MR*YJWDzL?eXXGxP0d0}bIwh<CS9noG|;=qw(
zB*Ov8Xvk>TC(w#^dx82)o5vo0fQ{9Q)SE4DO$$Rqtbi<7-?i+C26N3AH_W}OBE%Q%
znpFa*x~a}NoUD2_dq$yfg2mV{Cmkfh13J=Bi(we^*Ppzv@!r#GFCppNzP`2nEpK_t
z8@c+>L3Y+JkYwp)0H1&O!SBE4p3i)T)=gHPd6r|X8Uw9C2?~>At?$A#COFtH))EM?
zwxom0>L4kRLb0>AN0wV!vvcS;WPbTDk3V+m&GQEi{8gZXfw3mlQYB#&_jRbx30b*T
zQzp5>DZms2zc_FI_hBytgkgkI-ks>~?#^$luD)q)_2M_IoIUf6AnWzU3@X&jH0DuK
zQW(qetFJ=JfVsJObP!;TWp8JT(@#Fe&c-^;)(khl_;${pJ;T#aKI(%Ct<l<V|2DT^
z97aG8Mn3Qe6uUcHY;CR+=!nAR)ao^q)Z|5h6nm_%U&J{}v)Q0EJ42r5+<VW*2;-PW
za|Ve+D(TDqtpV!@!;oIL!<i=^LkNM?npzN$rG11D4D%kn?hZQ8q-jE)<qZ3Mz;TwR
zNk=1!BBwFaLJEm-e&IJqyHNBw*L8G7gM(U-iz&#uiju3`<tZwA>{rY2b4~~{Cs~YA
zB!fvhH;$nuV7Jaa_ukK`?Q^2lsM8w`+1}jd+U4U!^^h}9pMK?;b9?W3;GxfbGa}&B
zsWTi%dR%tHNkSc<r1F%U^GOp|0j&hv)IdHEUdJKIbFBQ`VUnO#$jOt}Qg1fc+3E6`
zdp~!Tz}!`DG;s(zdtKV?*$c0J!`EIWrE<oWJLZ?kb&Oe#zblxl*M?DuoLJ)a+Qp0C
zw7s_eO<QYguif0*XyrwQwFS4m{8bz|b_EaK`zZ$fK2rGzIOz{rJamYioegH&^K7lI
zbM~1hvBprV*O5xn>vkxL0v(1dFCV7aoMF)KQJ-nytYgsc5r!eV+gtQ|9h6c8QA{h2
z5kg`sQ2MZ&G|#EW4T4BBN(K~JL7JrGSxy)R1VM;(25T%@dtcZVhA@igce`wFtRbaB
z2Z85Ul~3A?UAodu5kjC;HIC1rr1CX&B?ydDG<88ey8uPO+CY%io0V40<5f<yGl&u@
z<3xggOpUF0iCiHt1T3%vrVB!W$f2e|3wAm%5DkCN21Dw#I>(P3B}-GRl?;YS>u*1I
z_cupD!0y%_PoH^;`f`ojS|TaYQi1j7D9eRr$7b4tS_+4drS-M~Yb;7CqBz1?OB6<2
zamBSLtvPq*S=LrBa?8y(5Y?OXM=5ENvb)<QilRs=<&ALVD}Rx!mwkT6SFY{4<cQ*U
zY>9iF&fLb@+SjeGTzu=+`r7OE_I78r($wm8X6NVq2rl7x`pL)GSiL|T*UO3`jgp$R
z3+Fj^<}`&ZsKqs$gFMeXn1x_88gT!;e~VI**||9n@Lq>3NifdPXtoH$2;rd7XcE_I
zjD~%j^E-x+5-l}Z*(h*krp=(=r`c?hrX%vSAWIX%DCXGZS7Gu3>k5oDUUHmg<XJ*}
zb{?%Xd67|T&Jc$Y!(opgipcVe(Qt^Q)HvvXs22MhTh^;)MUJ&zf~u7)L8n-(Tja%6
z=nFQII`UW(TjXP(xSBO9tJ&YB3*>diRaLniyC4(VPBR~7p00Do%SLOy>gAc0T~<1K
zEH5l_`)#*z*_BswczJ=f$3KG-7ArId4=r>4+4J20`Oi>q<s3h}OfniFwVsHQs3gW!
z-l9s2NN^V6d^;jn1&hKF1_2U59LHR^@GR@=8?@VV+<NPaxbpJL+1~9i9425affm#o
zwY>^=`*I{>5_;^ckAK%+ja3f9kRb57?|yf$y|uCV+ST(HzIAhL?G2s1of%^cQ5+M+
zG1hr%%ll0JOsq9*tgj-4FSNAAVX=PRoe($+gH8vjd}5`$H^MoA#nNoG07#RRVXu$1
z)?e6UNOy0SA}c709Hm2))>u<88ul6XdxSyceLX2Kg&~e>=s>fZB{*wnH0t0SQ52!H
z!We@>Bc;Y#gOZYZqfT6Jk|h~B)C_t9Z^3bdQACm?IOFT>!pQsGMV@0#)q@k9b!e?i
zpVJ|w#iEIeO~^X1Cs;3<v=&;}+_$t8R83PVi#*-c3U7?58VO8xR|kYju@rP5&wLaW
z0JS<KmUCzO-2RGJ^P(4D#=^oP-EN28a6n-pR1T#a-CmDwe~;^~J4vWc5Ck;_qY?A9
z8etSp&Y=R+6t*ZAq8M}47KimTsq+j>mgj^z;JO#QfTPEb5l1n5y}loAA4UXGNR}r1
zFu32vy)<r{{QEgAv~v!nHF4~fg#At@IKO)4b!#gt|7i8%%3J&0?yL|J6)0+r22%RW
zo)Cg8A7KiMbJLt61UjaY7i#UW$nlK{v?dJv@N@^{)?x}jPecmq=^^J=s1?4It8;#Q
zZ?n~6rroBJacU{hS~E&V<avgYn!*_3FeXVxj7EJVf}$`aX^%i_(j;N!?3r?ijl>q-
zUkjrMXA6?#yw@%uF}5gOMoGWhB?v;oFf4amfib!7u<6*xJS0Wo?Uj@m=X^I%bq4G@
z>8@kl)I7sc49g%_PHnGlyf{3aWf4w{t=8nmg0V0gz>-Q}koka6191f1l=GX8g`<aP
z)EhMGHLkhl1W%lPimhiHh0Q6llv7VW$@#O-FgF{s)7j<lamVrb12pDh!YC*|N{rnr
z=PE~Cj?cEjnG|43&tH~p5QMY5@Rk=5MKuP4K3SgmW{yFGP@beTrfh%kcRZ#hBJJlh
zowdQ{>cu-(E}Vb!-qz+@^CUYuN>hR`WbxoKCNIXmVxHx=GLswVh(J$Be_y(8an=uy
z5kjDJxpj()asq2Cd682Tg%7$)ZGyuR1{HT}356ufGE!s7(hL<OglRgq6jFFAA4V}c
z2oXTwEP)CLYau!esMYG8;2#ZHTU}vc@c@lR1Eik`5=Sw)DH!xUV4d^6x)6dQFX-&;
zQme((Y8vMpxhcr=0$UW`5=pQ7ttc#k^J04kQLTp58tvw2n=TYX&h84fM4c<^3fpm0
zu7fKFTne1<Jw5$Uo=MLW;r8FV0>y&PnJs#dX<v^RONayLw0LGW;rPu5xZ`CnB9MX)
zedJ?oZ0};y92YqnVZ@7Wz7A6idH)CB4}jGTE}J{TT(d@_;cIA>Qe(bY2wh^pmTr;5
zmF!dHT^nah>d~jbcXzf3qB`x_HpUbvp>WP)MG991!Czg6rRM_lbPQdqHF)r|pZgE*
zdH1`11mRdXu*j9yoFr^CIQz_Lk~{?j%~}(IW0WQYS`&mJQ5X@ITev_Vr2hhOy^eE^
zWH|CSNqR7wtRO3Lkf4-A$q1>ub+X1=XDxmAc|#=zazvq~Rj-leIqR#d<s$GGy0UOZ
z;oT8g1}IXh@krkw(4O*Bib20muh%8e8fOi23yaLmwK1kfQ5fot294GXfesiA21HRz
zdtm`nWGEG2on(7!ogz!TTcrciBqd2ko=cVr6=(vbXy}lBx6kUzMa2BW5H@(W)1x27
z#8NVZvGA!fG>$6GU0Oy;AKGsNQxvObINB;f6~jq_p&o;Dq-l-l;Bl@zdX!#gkKtfI
z7=$Qkc<R*S+<4tJtao-ebLvrEcE@de@>8E=XLpA*&j@A8nI|4+ZOvb6tSy6HM-<28
zg&|2s2(8Ci*vdHic-;BxuM|l-LMe?@5k;00hKiyn`DP(~G>r0L$lvL3Q);^^g@_<a
zQVt(I`i?ig^{w~U<C<DqJ^!XZfA>4zW?f*u{kz`&^KmWC^1?*QxlrP2nYFXlxK@!S
z3*A9~aktyOJQ)pVRVhe8`Sh=E1?88Wvkswkc|nE$DeB;?Z)PH7Szl^PF^oWnh%`%C
zXwS2}e1LkbMphVhwzny=9BXrMmckga%m-qCXCo@=p#0*6$+6C7{E}pZ!!aCqcVTOD
z(=Ws*BGeis6*`E#Uo0I#5Yl;O7X-w$I)RD^q(p`hVa*4$X_6w9LN^)+TX3M(BoHwl
z|JX;k`@x4;(1ss+%LrVJjVwXV%wY4pOtY1h)ylINs$vkPy^Ap~yYGHtjABvkfifk-
zfe#4d8atf?8#Ks`;llZgNE|m_e?4of&vJfkmwJ1f%l7)@xxp5O@A~%dU~jLBtk+pQ
zyv)WE>uBMdmwU_X4Mmn^6s2s{mOxik_D~62S$<`$U}tv|sRZXQT;$P59^sCczJ!}@
zej%N1ABR9Ig)`om@tpn7#>6+zmD~1!u2lZzk>@E3OY;vcA3pRDz)jrx(EI=BH{bTr
zPd(&*;XnNHe?D~hP_nzRad2;E_u$^{&XM8f=JA!4i$~YjSH#xV*38=aIy>9j43iOQ
zo-;@ivLyB0Nu?wRHMJ-v&;e2GExO;r8|7AJQCbm25%nlW1)x+&9L2O3<|)?Jc;d;&
zX*8SE<J!RHdA{52wuN-Gnl0w%=g^@K?o??Zw9;7Tznim`q6kPvBZ?v`wHAt2(|^8@
zx*Vf08n=MWvXsIa@7FmWv0ETdQ-*1eJkO~&8x+QPo;9k`ibERx9$TlL=Ki7K$+ZnW
z@wtz)k-+!8{3Ky>2xkXuWD)V=97UFocOa=GQtGiET?Kz*ceMgGmCNDV00}}Cbqc0e
zmW}|mS!lGlaAt#hAAE>SF<@z?g;bJf&Ya=g*>ltvk5R~3w%2yK{-#@KwVE70beJ?v
z8H^HwdW#pGIEZLQ{Fgs?4^b5R%&ZU;){-PU<XKLdr8H`F>h*eQB>jx>L4U|>dx5XL
z^J}>2rWf<kzrLHly6Z1#w`<&b>+NWj__4{xASo$NukDq9o%9NPZXoXm^u7jro<q#C
z420z3xeIUp^gVa~=-G`u`bnaG;QPM2s}QWMuhZ*w8T1B>Mnn3ep|55rx5&JB?s02h
z=@38=NR(2T!jKgfB`Kw%lB=%1l2^a{r8H|HfAYuwgWFzm$HO<=cuV@^sZ+0R&CW0w
zp5@tRo?$Q;P^(2q1VI#1uhogekRT3;qlhT<L296UC33yqAdaI_kD&+xg|AwcNCANk
z2t&`BMD>_3td(J{W2h5Mzl+x1Z3>EvTGD0ZsVDjDXYS{ba~Cl)v()RFm)(9V_dIZp
z6H5|;6gCnzvN>iKn`6G*4_I~Mq6@E?m?S1jBfd|8S8?H53KsPU(jmB_3<&EWVosmh
z<&%$nfrn4skJb_$geawbC6APxdG;JDD=W;-&iY~Vk;XbhtyU*b4ca8^jRqWCUMe%T
zKKmC30Sj~UjM9XnC_F2sbvepSQj9Y4Ea%1>ZscoU{aWIBlXm+NTJ<KIo9pz4U33`W
z5-%N>N+PwuIU#XQB7E1LOQb9Nj_Nr*fzflAZyoTNPki!+e)va!<ZEUZ7irDTiI0Ec
zZhHOfIR(Dp=W)c5VzJfWz=5USRac*Q?D+93Hg|SAM?d(nkKVYwv!kpr=s**OA+}ru
zLQ1SD2*c1vzDdr)+&r~bo$g+j(P&7T7d-Uvqik<%aQ(Gcv9__zAHVz0?l|_T`$QP|
zOy#-r=UCs|e9na;0Kf44))vMQVHl!?Ed6P}khGL&t<j+-i~^Jt#6d*8ULPl4!XThg
ztD&Qaxw#qIvrR7Ex5CAX7fH9b>8!5v$m$k-BzN9%3&#!}A_gu$aW#MXp}(b>ONb;p
zTZT>Q%+J)YN#DC%uAJ-V98_!&g<o7!Qq@3uAXj~?y(O$GLz_*1KZW&_T^vF`;n@o#
zAV9|<)>x7}$K^SrEcJA%bJ(Kb!o?M;X5~uCQq$tO^Ei%a)M}(@GQO%|plLQ5G@1>H
z!jwHhm=w`UMYA=F$sMaJD?EPc37$Un1aor>tgf!o>kpWpU&0m!Q4Le_QaW)dil=J{
zCX0EJTk$GucWKXw$#LYeBOkl+@?&r4XBmURfRk5UMSG^b)2KK0=H};i78e)Smk%F#
z=DHhhc;M*KW2YO9=616+(^)vMw2didpL*h{TkpE-qu=oPzxt~ycRPDhYei5Bd5Sz|
zG)ic-W=N9+V{=BMlvmzy$JX24{7vus@P|MAw$08?`?8})SYKVkI=_s%y*~Fn@;HsS
zPA!(=!i95KAk8wOC}MeOo}%J`ofo8oXLpS$FvgG@OWGS^?BGi*&9DA=@r_sU^FQ%J
zEY{)P&wh?4&Tdh!H`vJx*Bn30?Kj`br|)}!&5bqgdH4ysolTC+UJs(+eAluYG&me6
zhTRNG{u?33;-+e-kW=7=O{H*2INt=(dS+<kG|OSeyeqpbS$qv)vjsZ|Pp=IDi4GOQ
zsWH=30mWPV0HqYYK_7{v)%00KTagCNr?Uec_=P3GT1S>=2ugNJDGFm~&$Q|6?s0K_
z9VIeuy!i(H>#zShfBNTt$d#90!3{UvNPDJDuiy77NF}hQs)Ls}XO(kKiE*KXoBA<9
zwVV34o|Y<IDo9F3eO~&?JAdiDfBC^vzxZ=M^%oC3@G$TA<3E4(RVPl|hY<bgX|r3a
z7w68MJ9l{$Tal(o`@<jn;H!W8cYg1C{>Mk|dQE@iL8Agqo)?5V;L5A7<cTMqpdQC8
zA6Vq<xfSNxZI;?|yyq|8cf;cH()$1Q6F>fazx<28_|D(|<3Ic^iyaH~wN~uybco}a
zdZSKZ3M`H+P02H#=`*IRRdeO{LXIVkLMwzYpuJ{UNq+-yjz*(_Qj*aqVK^KhrKH(x
zd6vak0`1597KNcGaz;r)GD?_hNWvqFEH5ol&}NhlSzW!r>h?At{OeD0VdVnO8upAp
zBe=ZtFbr#~j5KNN14mn!arY^uD%#WUURdM(Yh200R|Npxnp<n>WpE<S2^n|@SfJj3
zW`pe1MH=nnyl5uk^qD8oL4YoY$9v1~3n37K;c&!FSD!#@#S_n*DVv=`5Cjy3C5~g7
z%_dovQxx9sMfq_RT1&K2bh=$`x$$~#e8CAeb~gE^-}626(|`*XE)vHzu<+J5eKS_V
z-5<M)fAqF*r?8fyyid-6vranayy$S+hn~Xq<RQPKOtBna>~a`mP|C7=^!R&!=I8(Y
z>wEovdgZkzKMr6DgOc#r=O2FA&;8U-{>tYbxbMZgogPXEhRKMe^hv^C(pl=@+yY<!
z#y39n;#+Rb-ucdVyks~W@bcSU%;G|en@(QIHCJ8R`QiWl$6vR&ytMwnz4yNP6ZhQn
z4IlW>hi*N4_5xD-i<;&ci*s}Q;6MLv?!M=4o_P8ks<if5o)gD0N(Sh-Onqxbx7VlF
z>mjAzvOV1-%J=jlB&`Ah?R!oPh64f}u&}T+jtMAx9A`;NUS!}LwR%KctC3`u|Mz$P
zggCCVv#~{Yv&U1b7m?EY;}_Oeal$bijW90c&SOV8+`R}-4LIAAaHx$*vyxvHD4z!a
zO0WqD+Vk?2u6WAlz>9zkg^gGay5M%JT#Oeb)nhg{GoD`W5G@}VF9>6Of=2qHM6Z3p
z(d!L);jzO+jetj<It>Q25-4fMHp~}76lg6`N@AVQqA2Al(RO==yYIe>TW@_KKl*(?
z#23EsI3NA!-Q0HTi+JTLUWO?O4jnwq>gG9y{eIb*)L&PuLwKgkl@nXavCz{PomBHw
znN{3Z5GM&C$+Cnz%~(2e?5?HKY8zvy)tjVA692&WeeXS={@nfgnv+*EzkG;|%}u&%
zDPgG5N^@X&nb*AfYrgQdx4h+DU;pMezZ-ZO;EtEw{*olguAHBnxg{NR4$jWZtY2K)
zJ@>x%z5n)){*Mp7`|-yfz2eC;=P*DR#gJt_iBS{;s?XN;7QKF-Zl{lRP_NaQotY<&
zW1o?7Af%vHuVInw?d^>#QM~5DvmixQcrqZ6G-j4?Kos?fq6mlZUGHr{mKJn6U9vpm
z;DH4e7nV4`vPu|$)Da)}=p!_mG3{oJrNu=y2Ln)!FbL`Py2Me;O*h>{{pdBkKHNia
z0iH2j7&NFa%ur+*2oDG;y{O7(%BpToWunO$oEhht#}(~TK`pAYtk=A078+y@Q3!!#
zYa2eXzDnBJWu_jEu_0vTgS&A+*Jw4k>ofPVFf-$e70UE`TI2-EH+igfb5(Np5?|aP
zmBtuDzq`vDzTumZ;R1j3&Oc>$ZwH5AacPm6)(i`a3qB2==G1Bpj45}Zk`63|Pd;yM
zy+6Lcg>BW;XPkmU@KuPD1m!l=?}MnCE&3qpUGMyzpS<t>2lWeIcoVktQ(H4L^!t6%
zG$YGX1eWVxaLtpodUXD-zxt~agKp>c=4`Wn^))Ye__CSS=_E})_Qc~)z3#ui_cvet
zzW2ZPpYC?M2LM{FIzmg76Ju@~A*e+$gW-T*`|UpjpxJ0rtJPSTUm^^HvUhRS)KAiA
z%o6u{<u!0)up48Lxt~3q=Q%}@apdqpiXvxcE2rD-GD=3oQG|7t?p~L<xi;5b_fifl
z9iZRs;hbczv%_9zkHbd~QX}WU`~sI<djlg0k3R7P)I89lT8(D2$woiLjZVSkj(itZ
zU5&Zf8d4gR)}<Cgpo0mhh4kZytu+*;<a>=R+bx8cB1Z+9NNN`JV9bVi%B~K%;oNGU
zoEr5wDB~<qYH7UgqM{3pF|?Zv)_Z*}tZp*Xh$*b27Dluibvpe)X%HmVmiiZ^%Ss&q
zLXzbvuY2tq`T93~3qSjBevB91@<LvG`yKSUduSbuCA&e%@e3`nn39tOCmfkE^m@I6
zrpP0uROYN5f2~Uc!cubQgTiU(dNIkDYC;G&KX^8-)!AHMKlr=9^V>hRw7f(`_2Hlv
z$1E=|d&#HrNsFKUKYsRYNs_%y3rdzCKx<7HDs&LCva(JA)ax}499W>p{f%qX>mZe<
zsjQ(emZI>Y{wS2=tYDsJY;CQ3_Ck9aN-K?0nw1OZ*w|Pfw+F7;4ph10JkJRN&HUUP
zquv(VyW50O%);UvqhZ9}-X6XFkjsxB=S45NgMP2isi&V|Yx5$3_GMOcvu$2{%MHxg
zA-BHhHafLBr_P)rO*52`L{W^%Gamf>L+tEieDAe6+$wqEDa%vLa&v2jVbVitU6#sO
zq%9j4ms;oC53EE?-5IUD7)oh{K@ww_b9+!2|NUa1(S&Zo<4^Y)0Zm!8&2=~{JQGsh
za3RY69>&m&BU~JnuPwk?=4%a1n$t7I*l({&uvF=f4~BgXA3VezFT0bKix)V5@jS2k
z+OHuDBcdqATKN1!4|46bFTfbf0}njNg^TB?H5znw_psJ58YXo1_PG4`k&o*z7!`&8
zJTXS_q&r6y5LUp}({tIXo(JQC%xN%>&AaCb|K_6~{kG3P{7`)5i4){`j?xMxe9c(1
z)$l1=>!{UhwCCo=0gb>{n^aqjwQ%CPYYCJd2Xg*7Qx;hI&l5t@-R)paPE>E8w8Rtz
zS(agp#TehP(AbPL8;-?2Ns=IiVs>_h+!X$GRAA10x?P1xCFyiKW9>$sWu*&R0|cFJ
zhesd%Jl)<dp^_{u%u}z`IdEW+BS(*NaG{Ns@R?I*`0RZT@$}gX%rsj>afA?#WR%by
z43IQ=;gSY7AhU48V$5+lWMnfk6uHpkQZsS_i^f<_-3^BWicHgJwJ>>#Qj(eokrtE)
z89BirWtek4UleN`)Fd?Ous!1Ob3=SnkzfqovHG$yTW+#_`}^e|50z$=<UDfrS%ehK
z%+6p<Sytsm&lu}aWkSk2M{m$4t~Gh{8^4(&2al1AhScIZd%Z6A-19dSMam<ee}K7#
z1KfObog~c|^oR7iU1nxm`77>x*)Lsx({(?crkQhPYh5pmnJm7lspxc*BwYcuVgkmU
z=cj;889`3_EJ7fnI39N%GKIkj-wW6l7H0*{T5Ordc9oRSIs)k%mSkB$7$^cAl+>Cl
z6<WSgNf792H(@wT`RCvL?KEqe-+t$xA#{KU1M2m7yo(rP$Dd{GMCn&)JG{=>`{7k$
zAW0H*5P0hz1Sp}f&SI<~&<dj!?e;7in;WdJJ<BU!@k$OXEVF#z0P_nAL~%%GZ<lk=
zKFd?5PxH_tkFneBF*`F$7%7IMA;aMaDFw}?Wv*X3&I=ZvgiXthS1NujIzzg8o)nD}
zg4sy2BU`MRh*T&{EhdX%`Z6a&VWS$Ukr){=A|f?l(QFh=uC9*=RSGr&QV3&cL~y>t
zg-(GA>)uER@E!ZhVuTXBRgvxZu3KC7#1Lp5fDEv<)ONe+|0{;fOAL&GJQdVpc<md$
zj^5rL!(>Pt#aLsx{PN3)YXPHv#+|RclTN3{Gf$o-iUO{?@#G)f^un8dX8F*8GsEG~
zXPC9}t@%n2BSbk<o_!)M0PPi0lxe+bm%~vt>#i)coBGSBR!fvt`=~x+?Raa)Q3f)8
z(7BWX;mYkvDR#Cu(K^5dF;ZB<P?HwckK2{rZ<j(~o%29-mWA1XJ8r*;yZ-tUJo4lj
zTC>ebx2MYgs@x{3#@m#dj#BBTCQOG?((8LmQ>4oC_F86%k`M$6r8Rk4@Qts3JwN_a
zzrdN(Phg$n+_|&d_qqFc@`=Ydcm4ua3Tll8LIw;5eL7uVFM06bK@J}}jF>;livq)<
zeh^ncAp|N*iOrCj07Cear)Qwk<=d}Fy+c?BW+l{W{tj9TK@8>WZr`$Ak}8Q7IrLIW
zVUK4x;*h<~jE#{Zno&6NeSIz_+xWyXPb~O^NpTpI@cp6vX?Picms_Y(0Ok#nDKbnk
z!r2<#UKfia2t%?wqdhyz8@}#MNFfMxz^Nyn#N;_wUwy@0H{Ej6FI;xT@lWJM!QO7i
zQ;AZPio)tPRU-fKhB7v|rG+lPL`6?gy>OC}@mUzTFGC&#!6*m<ua%H~2A-30ybV>-
zPh%}ui$$Vk0M2sp;tD_bgFnpM|H-%Uhrj>p{MI}E46Pz&W*b;jc==^{wn_>D9g+<b
ze*Ycs=Fz8~q?4r7N>@Ng-)_J;J1HuyI9iA2aHY34<Kh4zDDs@55NNH&bY4+-H%Mzu
zIkXS01GcxfIeE<${IehY5gz%%7kKo+&vN?Av)p&zXV}`=q0yQliffEU0|vc402Y@H
zabWon?b%tPK;v@9g@K_JZ6I3(iS?PcLAms1RL*CU!~C-g%N#v_n(K7L!hsZ0X!Hg3
zrXXyV8>$HL8I8W5IiW%#*MSsp5j0c(x<(BG#rd@XD;VUMotVgX$Ka)863T$F;<;V<
zJk_pO;zg7OY7D88RdQn=x4>B+==q@n{yoCT7h-ff9bDdJdHKNSZ@T5CpT6?MRUeQ_
z)9rMDvb@VxBm^-1d3MSqS3gQ0dn)xkeUxB!-UX>dCI~TJ6<X^|YmF=?j0z!ertnM2
zf|I^^y0o5)bq-8XP?(H*y}|3>@CGiw;utk$xbfP<tZfeI3{!03ty&laWO;@Zk}!bw
z+#K7xyS)3ocXQ~_Vd8pi;=@Ucmf`qIIp;i&tE!m5E5L*h<3OhJ%l)}IjGc_jkW%_)
zFVZI*;y6M_HGc6IewO?1{WLlV7$!M!Eu_)%)Yit<7A7x<L(N>fO)U;EdBUJq&^H-*
zl5??RnLV%phaA=@q|GTjVz5Z&%#fEXIzGP>@`>{UzO`W~YLGd_Xm3Qz1T<zFzWb*H
zr)QDH2wZ`4F#_eOI%j-i###gNoV9IBF6)F!kS0D@7eZiV*}<#=D3w^hvWVqgH!Wp#
z4yp812G;M$Qu_BqN<YfYI80>>OH>J^7z_p^{XPemm(SgB^Yy=Y;^eizRjb$O^?Ici
zx@@i~tIXwO$1gKYW1?f)r>;<2W(p<KQld%Q>I&>-+Ot}%KpaH_UG_SwR)~@chyNm2
zTl#0^iIp5M&atq##AojQ5Fh#T-(Ys}5a0jZ-_39Q{-5y71CMfWd5O_*NWVWQvrYkN
zlA*MwR*wku9OMO7z+gB;Dn%3p1Uh6e8hI^-*5pO*wIbHLJk}Ir088O5J5%4sIZuOG
zW6AT}TWK6wmN7ds%huKwXP-U8(xHO@ENM+uZJmuqoIJe9(aW#k-0C`=ZjUtWQWSmi
zAfOi2P&ksUElyrz;ZTkIjJG<qdP<gSGA%iw`n;hz;&ZcY?oAS|DVn51%i%z9RV$?!
z77S%ZV>a~Gsz^MTMda_F%RmQZh7g}6>=it_QJ}*nT8@x$>;V-R>gT1NqS7jh@i6+z
z{ZLvl8l~iUL9<cY_nfG}UKs`{OFGv#lu?udIp>ov#uTMmF=x>4GT)vZ-uj9={{3|~
zUjOf#vorayKP+<uWs@FUHH~JBL2szUR5EFTImQq9U$oz5O6tZrDk*6-y>^l}_y4E{
zx+x``)_&Bjvu><|o$^$?^s>AHLf|#gE?{e8gM06LfN%Mx*Ky}7@8n&7_I@6D>@-oJ
zDGCp!EGvAAI^|R5gMOce^;~X$FeERT63=oJM4=^16XLi=o@FGXgnGS!wT8hUq1)L*
zNX5d!JYgJ>=Z3*xNS<dj8+D>MqTAU+tB|M`F&Ol*rXa30KnUu!8bO&VpKNoM;V9wY
zOq2Kg>ASe{>cjl<fBH}SU;p`ciE9m7jRt$WyJY>5zqY2wK~;m<8SJb^DnnRLk-35*
zhe&dh5L~vm%ro&UzbFOWtuD2Gk2lVReD~3WmQERpocfGJ2;;YPX%V7KJZMu=6WYs0
zhdGZvy~9q@=LH9ka^023xc~8|+3s|y)ymy<%p3qxG8&~U%(j_r)mhotz!>LapedK5
z3LvNZY`d~Ah;%-qsI_J|8qwX^r4fbPddtnfed7yn{<#B(4z3Ib13EiC*`>-3uwufq
zmH(AMl48oNP7X1)+|?7lDZ2-730F#efN`G76jdl$0lNHMhfyJwrYL;YO=&eAhbzl{
zrt-zdEQj?zTwJel-$Rd36owCe<db~nfrqHo>wu%%?b2+tXf&G`Q(#R&nq<`KHS(fh
zZDWlvs`=g=!duuZ%gPJw#pYE_q_xF3+a`p>7~is>R;!WcBL;&$AShx>EF}GIpGLDu
zbEe5|lF;w<SvnA)bc_QA1F!9vnVlsWjWE{I?d<W|JMU!f&=KzX@L#gGwZ<!NzmbO?
zJ403!MD;p(r^9x4#4)LvAExkRh7(QVnHZc#ixi@SC;G?uwarDEZUENz=P1H}r$#CF
zZ(GjyLVo(BL=1c6S<XyLBO>ix3|ExCb>e{?)u0~2xh`i`Mu5QNIm7<Y??%#RK?UHH
z!dY9!6N+xP$BkEC!5uf9<O6qqn)936M1jA@(-}tWM9}XalQ`!)N*U+a*xEvxf*Y<s
z`6oBteB*yOdin7Ovn*wIXWR4VQkHXFN`ogT{reKEVq&SMU6*}kx<Y2@7U>G<6SH2K
zpUT`<OQW>j)f%!mYaNl&W8bt28pf-sTzR$xGI%Skv_dPzeGh+u!Eiupc7|FUm%goU
zyA=eUFO>+AG$|X=7=kdQR`c{zmL|-!nhcYaqR6S&Yo(^cN8rQZpcEVVax1L^(mY29
zg>z!c%J`8IK^S^J(ORM~CJ9o8!=YcWQk6<G-@U0Q3|Z>CG^KgQ-+bi#Jo(6Hx&39Y
z=E!9$JoJU%B1?0EP=SyP4V-8w79!2w=8(eep@RlALXZ~f^Zf3`V?4Co<FM*ui;$3z
zgLAW}WW;K=#ydA0FO37<exlBLcZ5ksH0K+Hb?J4n4nLnT!&j*^HNCUDJks-7+^1I7
zd1__d2Tzi5Fzmmd2Ur+|v|3HR@YE@Koi5!ZMTfe)mtt(ut5PsyELrYFO4bw%2LrlW
zo9x~8GG6{Qum140*IxZ^j~ze$X@{fR*##j8lpMdGFHx%)u@b~puv&uJ|D$quz6ja-
z@T~=u8Kbf@Zz%$)K<RC4m8F@`c=dX%la-}Qt=0@xORDN6qMX4|)x(VeE!Einnw@FU
zYBt9~+bBs&s|k&IqwLKwLMjE)bC30U-B(m&X*HXqX@Zo3Mx)^axKe}REwx1|jSwkH
z3&JpBH1Z<!EXxSP2xAR-p8Gacs;cVt*C5b-Bw3nf%*@OZ1R;6u6FE{ztTVLRZ9et4
zf6FzO9pt<I@prJaaFDw``XAZa*=1pAX&l6W;ED)lBEz;(XaTm{$EE>6ThSFqc(fNY
z?^Z!5io&9mLtvSiYtw8s=~=;D6wL4Jacf;LAEzXH9nv%;YPWntMpq68s>M(gtoQY!
zM=!hL&u3fVqOx{AEAlyOX<KYFH>R2AMWZN+hO@R_6a{&jpb+#%2@jlp7J-kgjho;>
zuuXeo4JjdxBW7B&EVkRU+wFdProDRdnv+kx<=ejVH&5Ph{RawT==XY1(y^6;<KsOa
zzg4lHqmqu6&c(E!QR$+`<i;ga$I92~{X^BOKfI*V<CGIFgrL{m<Hi@>^67v5V?X}u
zKlPJ8{)1H+l`{rca?x(es!zZy$7DR!YAajfE8(d>Sq5vpUT?C+Nx`7k$2yBrnp&+!
zmijuj-oSSyt;aE~<_xPF8)z+<o16C)<j#xK1rTUODkY=Q2<Lp$mvKi=r9Ayu)*o66
zQU&Nh(&_Z5*Xl?K)_FcVD1%0vBZ_PM;h+8m&z`?XmgU@g|AQ<nETE+i8jJG#9;rK`
zMvCYNj8hawKtD&jobzj|Y;OcUx~CjeDJ*$r>2$h8QOs-@@sL$~_*uvGLhzl-HQu-k
z2f`F~I?$5P5D+=faO~|-ES&iBulv^Pe{N>Zc#4w=n^Tya!q~_Zu4YU=n-|4go||@F
z<a2pm%=ZVq`BA?&hZQY^Zb==^#<iMhHfMVCbMtCpadG3o^1)}94jg)BVR7+nYqq^I
zJ2Si2oSPv{GCF&^e%BSH1XeJ~Q&6!KRX``k7~bbjh{-SeTQ*Goa(YaKzLayGxXYI`
zYjh6jywJPIbCN-y@Bf!S{6jli+XsK?|M|ba`NYX<JrJtpW{tP3IIJzDib9NA8Gv_1
zwAN!+MQcrx`pW6qcAG5CNU{{=d>^<pO+DF;AkR{q3ov<3P^%F~9^}>(q{g!ovaGg1
z2nu76rL=J{7yyo_QO6`Her|}F^83BCR2o66)nYUnvDeun2>jOUw_4*}DIB$WgFM%K
z_^&^X)|%E#(`y?_D$thS_gGVc_E<9(vQ#3a!z6-aeUF*w7%pfL8{Y)Sn4Gn>9d@^O
z2$Z7G0WBvuj^yDq;^U7g{>_%)|9s)l>o#QRGAbabL1M`3hd1Vq9Htp{%Pm}v<A2}L
zNTm{y3gPyoRA&*AqDaZpA(tJ$hAU6pNUdHcsyB#h4WhW_x$mjN6u#!t6gj3S*xuao
zt%ysljmKZrJ+(4q6B+E-m6$^CB&jpScvOEo706Z`okynd6)U0ytS2}owpmy=9(!DU
zoOA$^r1UL+;^%(;tt;oxf9~CX{_YoFdGaKfg0%}PU<Hc@4iLv7#$=@=auPsH59_IX
zSs$bb7Ut#%qL}s3IykQ*o>7`W>2dN02XPpom12~nKE13YaU4+?L!M<cnoS=h%gX<g
z)M_=hw|5AGfLg7=Xy~_C?`K!-4t(*aF_tKbXf_*kx;+~8G8nBaM8&^5hZ2edOG{%a
z%$Q=Fu(Jqi2rg?m(1Iw^NbMav;{-a$II<8D?*^Rj`ue(VXTbK(Hfb^<(g9sSCYFDa
z_PIVP=tr7OEqOtZP!#28@5uSP8)yhD<Pk-1;K|l(NL|*)*3Y_X@PlV;s!}QIEJZdV
z&>_dKy_Ku4yM@-=62|y;5WQhSr#Hm8ihnL~BKL!GqU00%jiQ*+V^j%~ePEs()2$oE
zI2V3Fj-Q`Chw?pj<>ZZh-%H+DIL1PieTS5EJA2G89pG1g>%YC~{Dlk8-h1C?mku2{
z%D?<yev~5z7x;re_+3t)U14Ei0aFy^7vJAKa=MwiR+`z?j1RO@U*{IL{Lsnn?jFrX
zlm2i>p5-(fb+Rla%X07TI9K)(_AKOJFrZeiqf2R{DGG|BpkA*N1Zu*;D*v3P$`yH@
zPfE6&@6O+zYm=oZNs>~p)qS;d=?{*RIf8L2xDs7SDL_J2z(J)sx#Zg*gjMEJY81YK
z%wNdkJh9s+-Ps}w0w{ddO&n<YNH#~3A1(%b$5MifEP+m$jX|}+g~Cs4@mr`*c`G2R
znJhl=a8m@tF7knU*@)5_i*r7BmPmxsI47B#S>)u+FXP~4Cm4-}^g7#<Ah66q%WBY4
z1-N}6t@>I|tnf5oC%;#atjY$(RID~;;l}Sdw#w7kDN*StGn5YW)ZFp0Nac%G%f2^Z
z?5qo+*jig>@z9~+Z~p!}UjF)5z2b><IFkSR$9@b(7y0x(A7FEPi=rsJj|wHYCV;6j
zch0%7tTfMaq!7$BniRIc3Bmlr0(qL1O~*s(jV9I@_V)GwJlioC(wdngD{?w}d;WdO
z5fd}BGc=o?@z5%uR<EO!9$Ro@b6=ZRUQJ_i@;t*COBlzrT1~dMwn@_w#x{LXsr6Lk
zc!#l!V+3EpEs<za1jm(QdBMSqK<yMDB+lfB!1006b^N<if<|wRT-4c4C2_3DT|z&z
zv~tCdrd|Hku`acv663tiBnvH}7DQO@ZiMAcs?|XT<VE~UH&<Ii`kCQc2gtBVphJQn
zAP6FYxK0$-32Sw97!bz|!djDFch_g`l$;p4%5A9Jg(>%-+TA7qo^l;L_dE7@r(K5q
z;GFiOD`ZQU`m9TkIRRruCw8{C_5rs7*S?t^m#hlsL^)60KW>fTz>!0I@}7^s;<ta}
z*FJIE&DSy-Y;xk{_1t&g=lO#_eLn}55A4e>8ROXn*iX)n^|fWzt}q48IlA3GC$74J
zH+{pa`Orr`#^X;t%k0d|*a!D&zw&#P86@MJujp1@ZvvEh4Sx>S6comwly^tcG(~H#
zUmgudSYznz?T}^#vx`dz9C@D8YPHCVoZeoC*_j!FASi|IYC>I>R3=jTW-Xf?-uJ42
z+g_f*Mp^S|0T=K+kKVvvoZF*`;-AfD9IyBI<W58{cN{jBuhRqGusDPzNVPY<5<g~5
z3X2d5W*l5$eJ$ZtM_{qdFnHYupI-RhZ`3L!3M0bEr|?w}`HG!Vy5NI&PpuZFz~tE&
zoYMi^1aoqNuPW%<=UP-4oCb3BxY+liec+wKz<4JZJN*7{FHNrO`*X*{haNXH*~dUk
zjtR)80bagV3N}_Q@`_j8`N`SY_G{kruHXIGk>w?pmzMeTXYONteT`Zi69m4o%rtO)
z+I8}twzPO&{#p59(CPL#cwmmVf6LcXq(eUYz@xO9EsDYe-a1<rlUDts{Q0ZW8aQhy
z#x!E(j!8mQSyxA`R`b`dFx2A)ChPOP|Kj_&;+hk@>)r3>-UlCL;lMJs$OxojabaP6
z&J}>Cub)y13$y~sX#~G{pW(J67HX6(0$>cH=+em}-ZEqOw>PXpob$ci67UND`T)qG
zUfnQ(=dTqIJD7E_SH5Q?z;sbpzVfq|U3CLG8F;_hTAVc)XEDxT(t@#VthU|~#A4si
z@+n!;Y*W^E%pFgIaUaSmyIi&XoqE1>DJHk8N}^0HkP2&V%Ej2XFqnEC)KC8Sk3GkU
zOkP#B)3SDa2Ic2?r`rSF`#-~8pT(u6GnZd^&EFn6e8t-N)vZsdpz#;Sj$HOP#^tRn
z&yQ~J?$Yb_NYe~s48_>*E$5k(EP^b#U|TjTtkr9*te&US>2UhYDr+0tL}4&qWEFQ_
zNk*$GigAC7G0^<W9aWW0)xyDd#iZ2wcDr4!zUoST?Kl1#Cr=#V^y3e5>eMqBBtaOA
zC5_V-d3@E%ov!M(>5La;Z4E4M5ion$V$<?IO2>b_xP(gKLoYvvYGyFRi;JrNr>vvD
z8RgHi1spZ!7l;K8w7pWW*d@Q>`~QzYaQQhi+Qk$())eJL0^j{fI9GNtt^8eA{w)9Z
zv2<CtIF(cp6EIIw=VJV~>;vxp=O&iFd``f=q>bEXw#P2cz6Zuk^YlN;<uL7XOdlR(
zcKp%_fXB~HddHRTS*fLbV@APnl(2I4G!K6EQ#^V4$?(F()fYeY)Kgb(Z|_{5X6bxt
z^7$ey+Iec)xn<tL0?@`wYmk7}-X)2`h$PDxWrn$#2CY^TDOA-ms`S5o_aN`Di*ctv
zTh^mhz%9QC)vXu@y;a>Bu(7$x+u#0nUVrDUeB>|xjGJHla-KcA!ted@Ul5lK*{f83
zWubw|?gFKo<FHAB8w@zJm-17Q<!9$p(j0UHWE0-I1BY7h(kn{-yYhuEF=*wAo!r9!
z#^YsYf#V0j1+cXOw|vtlI<NViSEocq7K1N(8&_IZ=PFQD;BZvp|H>MReZUzvGV-p@
z)M^vs#M`Ak7N<L^;!Tby&5xK~1SM5Gq2BggfN3B6OC4fwd+W=)+m|pBm;OEt^lC(K
z)x#poQilCbsU6Uz-<*-ADQT9F<^{<xrQhu_81&=OXxJW(hV9WPZ4U<hc9y3zd7d?s
z(WpKcjOuBU%=U+a`F?*em!(N_G#o6AMv2a{ROUr~s4%ux6otl7FO85-R8&@93bYQ#
zBPF!<mFZQ-q_HLeL7HY9J$i)i`zPPV;(VQ#yyO-9#(#SUzxo@$<&!3Qax=$$l1qT^
z>u(|?D$iI%bH3Zh?d<ViZoZkXIeGX2n+@i~aCg3Lwr3e-tZ(ch(jl>hCLm+{5^o5|
z9ZrL&1F^@g2=Jg*KubfdfE<cD{^h&6ul$wo%!?G6?cgUgPwnm{J7I;G+P(!~Dcc83
zxgI5#Kb4TFcE!ou_44s@aNuOlihs}YqB713;!1v6O{}b#^iG+iyf3l9`@qhnc=xaQ
zk`{UjykG9$(*fk9B*%`q%1WCdrSf!_^1YK~+2BPeS*Et9SGDtv221H@Q4|z;L7t~1
z>4+rB7!C#u`aK4N0mETW4hF-6gTbIa8VtixlFW`q$zql!%l%P*F&U+ebTn-DhlBai
zC~1yHqt+-%Tf<?$mZgcz(mcwtG{}oW6uAisV<H@StCw)w4Oa)>@$KIpoqp;x|NZ@c
zNvA&`uGKvEEHz;ml#LaYA1qmZ-|FUDA;|lE(w#1s9Xrh1{>8uet(U#&TYu&FWtTlB
zGDm1kQy0k`NjmS6WPb3-XBUT`{rF-a#ey1a&WgQ@vpOthTUQ>OSFv6eSuYZdG9ir>
zT3WO+BGMLBcQW5}*;TK(tMk&I`57}xP@@fydJGOZ25AYl@`o3bl>#6!iCrorj)O5V
zxj)mc#Xc8e48CcURaN*fU6GHF-sP)c`yA}Y7!NS9^6pDp>oK6G0XxlXOfw&s0{Bv3
zPkvq+K$=Tl^Bm{A@2oD_Xi9(7gG82vtqP^Qm6c@*yK13TT?Eff+j7S+<XKLZC1j<%
zbU5m(WR&R9a2Sq8!yrjgnT&?vFiD~`O@lNU$(4&2qfx)t?sU5go$g>ZNr&}bw-a_c
zT`?F98bw|#o7^tvMLt&;J8O+?J7?MsTNh3Q!a5P;xH<$cKXTwV-}*JL{ed|tS=7*O
z21KnEdg%~$W)3?Xk#BA?%5w5rNYR)<9K3@1vBR{kxe-xo;)>i$O-m)AD7j=I6hcN6
zK@*ZKlo@$2k8gYlrYY`tKfu}Vs#Y=C*w2A-jKcWuODAi5y@i<meS(>4cDuL2WehgH
zx6|)Yxo(wKy=uf!1%_qKt8d<M$tjmR#opEzH#WTV_)2a^_4{)Jz51}q|Ni14+<jX#
zU%ZIE(z#7U`qgD(Dqxu0u!$gDl!X96xob#N)p}P}6%*y+u-<ht#*mIuM#CO?o|0!7
zqjW@?X5?v3nkJ-KDzY?dWNF$=lcbSnSwJ$BHRD7(2*M~EK3wc>*#^)ma^fOInG|Uf
zKdoz&Bc$-LLDD5|)~R1{5;@bRusI@%am_ZaIghK)VB<Qj(Lyv9a9WqQy=)v_R*p~x
zS!1eAOf2(r1zgj#nwz}TUte*_>#NKBMf?79+u8jA9hd&{MMkXjdB^u|-y4jhdpG5i
zmlpb~0nnFoL8kr2OD#5&b1Dxz^{w_Vgz1z1Qs?rOT%oV_{Hyy=Qk>(@FZY%4IbXUM
zDiM<`$4&_8+ux2|D(QJ$Dlj2R56X|+$W883^F@Ia$_u(o28F@p7GFJ^`{*zkL9YW@
zj!XxLq=PClq%g=JM9wTA<_{s}kK(jX5?Lv|U{XjBYF~lH)N-HlQ7<_vtIarXSN`pD
zz4nWNJ2o!UZ#VV&>apqPpZm3V2IkVuLx{=WI4DPgjo(RpwSaj3c>egG;kcAvdH#6*
z_@DZC9?;Jp|DcZN0sZ{(59)Xx(9a+LppNGO{rvF{>UbW|&maGwj^_dW{P7R!`2PS5
WD$uv(QG=ZT0000<MNUMnLSTY!0(l_-

literal 0
HcmV?d00001

diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini
new file mode 100644
index 000000000..aa95ed6df
--- /dev/null
+++ b/resources/profiles/Creality.ini
@@ -0,0 +1,415 @@
+# Print profiles for the Creality printers.
+
+[vendor]
+# Vendor name will be shown by the Config Wizard.
+name = Creality
+# Configuration version of this file. Config file will only be installed, if the config_version differs.
+# This means, the server may force the PrusaSlicer configuration to be downgraded.
+config_version = 0.0.1
+# Where to get the updates from?
+config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/
+# changelog_url = http://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
+
+# The printer models will be shown by the Configuration Wizard in this order,
+# also the first model installed & the first nozzle installed will be activated after install.
+# Printer model name will be shown by the installation wizard.
+
+[printer_model:ENDER3]
+name = Creality Ender-3
+variants = 0.4
+technology = FFF
+
+# All presets starting with asterisk, for example *common*, are intermediate and they will
+# not make it into the user interface.
+
+# Common print preset
+[print:*common*]
+avoid_crossing_perimeters = 0
+bridge_angle = 0
+bridge_flow_ratio = 0.95
+bridge_speed = 25
+brim_width = 0
+clip_multipart_objects = 1
+compatible_printers = 
+complete_objects = 0
+dont_support_bridges = 1
+elefant_foot_compensation = 0
+ensure_vertical_shell_thickness = 1
+external_fill_pattern = rectilinear
+external_perimeters_first = 0
+external_perimeter_extrusion_width = 0.45
+extra_perimeters = 0
+extruder_clearance_height = 25
+extruder_clearance_radius = 45
+extrusion_width = 0.45
+fill_angle = 45
+fill_density = 20%
+fill_pattern = grid
+first_layer_extrusion_width = 0.42
+first_layer_height = 0.2
+first_layer_speed = 20
+gap_fill_speed = 30
+gcode_comments = 0
+infill_every_layers = 1
+infill_extruder = 1
+infill_extrusion_width = 0.45
+infill_first = 0
+infill_only_where_needed = 0
+infill_overlap = 25%
+interface_shells = 0
+max_print_speed = 100
+max_volumetric_extrusion_rate_slope_negative = 0
+max_volumetric_extrusion_rate_slope_positive = 0
+max_volumetric_speed = 0
+min_skirt_length = 4
+notes = 
+overhangs = 0
+only_retract_when_crossing_perimeters = 0
+ooze_prevention = 0
+output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
+perimeters = 2
+perimeter_extruder = 1
+perimeter_extrusion_width = 0.45
+post_process = 
+print_settings_id = 
+raft_layers = 0
+resolution = 0
+seam_position = nearest
+single_extruder_multi_material_priming = 1
+skirts = 1
+skirt_distance = 2
+skirt_height = 2
+small_perimeter_speed = 25
+solid_infill_below_area = 0
+solid_infill_every_layers = 0
+solid_infill_extruder = 1
+solid_infill_extrusion_width = 0.45
+spiral_vase = 0
+standby_temperature_delta = -5
+support_material = 0
+support_material_extruder = 0
+support_material_extrusion_width = 0.4
+support_material_interface_extruder = 0
+support_material_angle = 0
+support_material_buildplate_only = 0
+support_material_enforce_layers = 0
+support_material_contact_distance = 0.15
+support_material_interface_contact_loops = 0
+support_material_interface_layers = 2
+support_material_interface_spacing = 0.2
+support_material_interface_speed = 100%
+support_material_pattern = rectilinear
+support_material_spacing = 2
+support_material_speed = 40
+support_material_synchronize_layers = 0
+support_material_threshold = 45
+support_material_with_sheath = 0
+support_material_xy_spacing = 60%
+thin_walls = 0
+top_infill_extrusion_width = 0.45
+top_solid_infill_speed = 40
+travel_speed = 100
+wipe_tower = 0
+wipe_tower_bridging = 10
+wipe_tower_rotation_angle = 0
+wipe_tower_width = 60
+wipe_tower_x = 170
+wipe_tower_y = 140
+xy_size_compensation = 0
+
+[print:*0.12mm*]
+inherits = *common*
+perimeter_speed = 40
+external_perimeter_speed = 25
+infill_speed = 50
+solid_infill_speed = 40
+layer_height = 0.12
+perimeters = 3
+top_infill_extrusion_width = 0.4
+bottom_solid_layers = 6
+top_solid_layers = 7
+
+[print:*0.20mm*]
+inherits = *common*
+perimeter_speed = 40
+external_perimeter_speed = 25
+infill_speed = 50
+solid_infill_speed = 40
+layer_height = 0.20
+top_infill_extrusion_width = 0.4
+bottom_solid_layers = 4
+top_solid_layers = 5
+
+[print:*0.24mm*]
+inherits = *common*
+perimeter_speed = 40
+external_perimeter_speed = 25
+infill_speed = 50
+solid_infill_speed = 40
+layer_height = 0.24
+top_infill_extrusion_width = 0.45
+bottom_solid_layers = 3
+top_solid_layers = 4
+
+[print:0.12mm DETAIL ENDER3]
+inherits = *0.12mm*
+alias=0.12mm DETAIL
+travel_speed = 150
+infill_speed = 50
+solid_infill_speed = 40
+top_solid_infill_speed = 30
+support_material_extrusion_width = 0.38
+compatible_printers_condition = printer_model=="ENDER3" and nozzle_diameter[0]==0.4
+
+[print:0.20mm NORMAL ENDER3]
+inherits = *0.20mm*
+alias=0.20mm NORMAL
+travel_speed = 150
+infill_speed = 50
+solid_infill_speed = 40
+top_solid_infill_speed = 30
+support_material_extrusion_width = 0.38
+compatible_printers_condition = printer_model=="ENDER3" and nozzle_diameter[0]==0.4
+
+[print:0.24mm DRAFT ENDER3]
+inherits = *0.24mm*
+alias=0.24mm DRAFT
+travel_speed = 150
+infill_speed = 50
+solid_infill_speed = 40
+top_solid_infill_speed = 30
+support_material_extrusion_width = 0.38
+compatible_printers_condition = printer_model=="ENDER3" and nozzle_diameter[0]==0.4
+
+# Common filament preset
+[filament:*common*]
+cooling = 0
+compatible_printers = 
+compatible_printers_condition = 
+extrusion_multiplier = 1
+filament_cost = 0
+filament_density = 0
+filament_diameter = 1.75
+filament_notes = ""
+filament_settings_id = ""
+filament_soluble = 0
+min_print_speed = 15
+slowdown_below_layer_time = 20
+
+[filament:*PLA*]
+inherits = *common*
+bed_temperature = 40
+fan_below_layer_time = 100
+filament_colour = #FF3232
+filament_max_volumetric_speed = 15
+filament_type = PLA
+filament_density = 1.24
+filament_cost = 20
+first_layer_bed_temperature = 40
+first_layer_temperature = 215
+fan_always_on = 1
+cooling = 1
+max_fan_speed = 100
+min_fan_speed = 100
+bridge_fan_speed = 100
+disable_fan_first_layers = 1
+temperature = 210
+
+[filament:*PET*]
+inherits = *common*
+bed_temperature = 70
+cooling = 1
+disable_fan_first_layers = 3
+fan_below_layer_time = 20
+filament_colour = #FF8000
+filament_max_volumetric_speed = 8
+filament_type = PETG
+filament_density = 1.27
+filament_cost = 30
+first_layer_bed_temperature =70
+first_layer_temperature = 240
+fan_always_on = 1
+max_fan_speed = 50
+min_fan_speed = 20
+bridge_fan_speed = 100
+temperature = 240
+
+[filament:*ABS*]
+inherits = *common*
+bed_temperature = 100
+cooling = 0
+disable_fan_first_layers = 3
+fan_below_layer_time = 20
+filament_colour = #3A80CA
+filament_max_volumetric_speed = 11
+filament_type = PLA
+filament_density = 1.04
+filament_cost = 20
+first_layer_bed_temperature = 100
+first_layer_temperature = 245
+fan_always_on = 0
+max_fan_speed = 0
+min_fan_speed = 0
+bridge_fan_speed = 30
+top_fan_speed = 0
+temperature = 245
+
+[filament:Generic PLA ENDER3]
+inherits = *PLA*
+alias=Generic PLA
+
+[filament:Generic PET ENDER3]
+inherits = *PET*
+alias=Generic PET
+
+[filament:Generic ABS ENDER3]
+inherits = *ABS*
+alias=Generic ABS
+first_layer_bed_temperature = 90		
+bed_temperature = 90
+
+[filament:Creality PLA ENDER3]
+inherits = *PLA*
+alias=Creality PLA
+temperature = 205
+bed_temperature = 40
+first_layer_temperature = 210
+first_layer_bed_temperature =40
+
+[filament:Creality PET ENDER3]
+inherits = *PET*
+alias=Creality PET
+temperature = 240
+bed_temperature = 70
+first_layer_temperature = 240
+first_layer_bed_temperature =70
+max_fan_speed = 40
+min_fan_speed = 20
+
+[filament:Creality ABS ENDER3]
+inherits = *ABS*
+alias=Creality ABS
+temperature = 240
+bed_temperature = 90
+first_layer_temperature = 240
+first_layer_bed_temperature =90
+
+[filament:Prusament PLA ENDER3]
+inherits = *PLA*
+alias=Prusament PLA
+temperature = 215
+bed_temperature = 40
+first_layer_temperature = 215
+first_layer_bed_temperature =40
+filament_cost = 24.99
+filament_density = 1.24
+
+[filament:Prusament PETG ENDER3]
+inherits = *PET*
+alias=Prusament PETG
+temperature = 245
+bed_temperature = 70
+first_layer_temperature = 245
+first_layer_bed_temperature =70
+filament_cost = 24.99
+filament_density = 1.27
+
+# Common printer preset
+[printer:*common*]
+printer_technology = FFF
+bed_shape = 0x0,200x0,200x200,0x200
+before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\n\n
+between_objects_gcode = 
+deretract_speed = 0
+extruder_colour = #FFFF00
+extruder_offset = 0x0
+gcode_flavor = marlin
+silent_mode = 0
+remaining_times = 0
+machine_max_acceleration_e = 10000
+machine_max_acceleration_extruding = 2000
+machine_max_acceleration_retracting = 1500
+machine_max_acceleration_x = 3000
+machine_max_acceleration_y = 3000
+machine_max_acceleration_z = 500
+machine_max_feedrate_e = 120
+machine_max_feedrate_x = 500
+machine_max_feedrate_y = 500
+machine_max_feedrate_z = 12
+machine_max_jerk_e = 2.5
+machine_max_jerk_x = 20
+machine_max_jerk_y = 20
+machine_max_jerk_z = 0.4
+machine_min_extruding_rate = 0
+machine_min_travel_rate = 0
+layer_gcode = ;AFTER_LAYER_CHANGE\n;[layer_z]
+max_layer_height = 0.3
+min_layer_height = 0.07
+max_print_height = 200
+nozzle_diameter = 0.4
+octoprint_apikey = 
+octoprint_host = 
+printer_notes = 
+printer_settings_id = 
+retract_before_travel = 1
+retract_before_wipe = 0%
+retract_layer_change = 1
+retract_length = 1
+retract_length_toolchange = 1
+retract_lift = 0
+retract_lift_above = 0
+retract_lift_below = 0
+retract_restart_extra = 0
+retract_restart_extra_toolchange = 0
+retract_speed = 35
+serial_port = 
+serial_speed = 250000
+single_extruder_multi_material = 0
+start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG92 E0.0\nG1 Z0.15 F240\nG1 X60.0 E9.0  F800.0 ; intro line\nG1 X100.0 E12.5 F800 ; intro line\nG92 E0.0
+end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 F3000 ; home X axis\nM84 ; disable motors
+toolchange_gcode = 
+use_firmware_retraction = 0
+use_relative_e_distances = 1
+use_volumetric_e = 0
+variable_layer_height = 1
+wipe = 1
+z_offset = 0
+printer_model = 
+default_print_profile = 
+default_filament_profile = 
+
+[printer:Creality ENDER-3]
+inherits = *common*
+printer_model = ENDER3
+printer_variant = 0.4
+max_layer_height = 0.25
+min_layer_height = 0.1
+bed_shape = 0x0,220x0,220x220,0x220
+max_print_height = 250
+machine_max_acceleration_e = 5000
+machine_max_acceleration_extruding = 500
+machine_max_acceleration_retracting = 1000
+machine_max_acceleration_x = 500
+machine_max_acceleration_y = 500
+machine_max_acceleration_z = 100
+machine_max_feedrate_e = 60
+machine_max_feedrate_x = 500
+machine_max_feedrate_y = 500
+machine_max_feedrate_z = 10
+machine_max_jerk_e = 5
+machine_max_jerk_x = 8
+machine_max_jerk_y = 8
+machine_max_jerk_z = 0.4
+machine_min_extruding_rate = 0
+machine_min_travel_rate = 0
+printer_notes = 
+nozzle_diameter = 0.4
+retract_before_travel = 2
+retract_length = 5
+retract_speed = 60
+deretract_speed = 40
+retract_before_wipe = 70%
+default_print_profile = 0.20mm NORMAL
+default_filament_profile = Creality PLA
+start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0.0\nG1 Y190 E15.0 F1500.0 ; intro line\nG1 X2.3 F5000\nG1 Y10 E30 F1200.0 ; intro line\nG92 E0.0
+end_gcode = M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+10, max_print_height)} F600{endif} ; Move print head up\nG1 X0 Y200 F3000 ; present print\nM84 X Y E ; disable motors
\ No newline at end of file
diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp
index bc73e3262..393d973b7 100644
--- a/src/slic3r/GUI/ConfigWizard.cpp
+++ b/src/slic3r/GUI/ConfigWizard.cpp
@@ -166,6 +166,8 @@ PrinterPicker::PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxSt
     int max_row_width = 0;
     int current_row_width = 0;
 
+    bool is_variants = false;
+
     for (const auto &model : models) {
         if (! filter(model)) { continue; }
 
@@ -220,6 +222,7 @@ PrinterPicker::PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxSt
                 auto *alt_label = new wxStaticText(variants_panel, wxID_ANY, _(L("Alternate nozzles:")));
                 alt_label->SetFont(font_alt_nozzle);
                 variants_sizer->Add(alt_label, 0, wxBOTTOM, 3);
+                is_variants = true;
             }
 
             auto *cbox = new Checkbox(variants_panel, label, model_id, variant.name);
@@ -280,10 +283,10 @@ PrinterPicker::PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxSt
     }
     title_sizer->AddStretchSpacer();
 
-    if (titles.size() > 1) {
+    if (/*titles.size() > 1*/is_variants) {
         // It only makes sense to add the All / None buttons if there's multiple printers
 
-        auto *sel_all_std = new wxButton(this, wxID_ANY, _(L("All standard")));
+        auto *sel_all_std = new wxButton(this, wxID_ANY, titles.size() > 1 ? _(L("All standard")) : _(L("Standard")));
         auto *sel_all = new wxButton(this, wxID_ANY, _(L("All")));
         auto *sel_none = new wxButton(this, wxID_ANY, _(L("None")));
         sel_all_std->Bind(wxEVT_BUTTON, [this](const wxCommandEvent &event) { this->select_all(true, false); });

From dd59945098fbf55eb45e30d67471f8f265895a65 Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Thu, 14 Nov 2019 17:02:32 +0100
Subject: [PATCH 79/84] Fix of a typo in KDTreeIndirect. Improvement of the
 infill path planning. Regression fix of Gyroid infill crashes. Some unit
 tests for elephant foot and path planning.

---
 src/libslic3r/ClipperUtils.cpp                |   2 +-
 src/libslic3r/ElephantFootCompensation.cpp    |  87 ++++---
 src/libslic3r/ExtrusionEntity.hpp             |   9 +
 src/libslic3r/Fill/FillBase.cpp               | 102 ++++----
 src/libslic3r/Fill/FillGyroid.cpp             |  27 ++-
 src/libslic3r/KDTreeIndirect.hpp              |  86 +++----
 src/libslic3r/ShortestPath.cpp                | 218 +++++++++++++++++-
 .../test_elephant_foot_compensation.cpp       |  15 ++
 tests/libslic3r/test_geometry.cpp             |  42 +++-
 9 files changed, 443 insertions(+), 145 deletions(-)

diff --git a/src/libslic3r/ClipperUtils.cpp b/src/libslic3r/ClipperUtils.cpp
index 25100b22f..f053aea29 100644
--- a/src/libslic3r/ClipperUtils.cpp
+++ b/src/libslic3r/ClipperUtils.cpp
@@ -1205,7 +1205,7 @@ ExPolygons variable_offset_inner_ex(const ExPolygon &expoly, const std::vector<s
 {
 #ifndef NDEBUG
 	// Verify that the deltas are all non positive.
-for (const std::vector<float>& ds : deltas)
+	for (const std::vector<float>& ds : deltas)
 		for (float delta : ds)
 			assert(delta <= 0.);
 	assert(expoly.holes.size() + 1 == deltas.size());
diff --git a/src/libslic3r/ElephantFootCompensation.cpp b/src/libslic3r/ElephantFootCompensation.cpp
index 0f4eb0135..828064c32 100644
--- a/src/libslic3r/ElephantFootCompensation.cpp
+++ b/src/libslic3r/ElephantFootCompensation.cpp
@@ -60,9 +60,9 @@ std::vector<float> contour_distance(const EdgeGrid::Grid &grid, const size_t idx
 				for (size_t axis = 0; axis < 2; ++ axis) {
 					double dx = std::abs(dir(axis));
 					if (dx >= EPSILON) {
-						double tedge = (dir(axis) > 0) ? (double(bbox.max(axis)) - EPSILON - this->pt(axis)) : (this->pt(axis) - double(bbox.min(axis)) - EPSILON);
+						double tedge = (dir(axis) > 0) ? (double(bbox.max(axis)) - SCALED_EPSILON - this->pt(axis)) : (this->pt(axis) - double(bbox.min(axis)) - SCALED_EPSILON);
 						if (tedge < dx)
-							t = tedge / dx;
+							t = std::min(t, tedge / dx);
 					}
 				}
 				this->dir      = dir;
@@ -70,6 +70,7 @@ std::vector<float> contour_distance(const EdgeGrid::Grid &grid, const size_t idx
 					dir *= t;
 				this->pt_end   = (this->pt + dir).cast<coord_t>();
 				this->t_min    = 1.;
+				assert(this->grid.bbox().contains(this->pt_start) && this->grid.bbox().contains(this->pt_end));
 			}
 
 			bool operator()(coord_t iy, coord_t ix) {
@@ -361,7 +362,7 @@ static inline void smooth_compensation_banded(const Points &contour, float band,
 }
 
 ExPolygon elephant_foot_compensation(const ExPolygon &input_expoly, const Flow &external_perimeter_flow, const double compensation)
-{
+{	
 	// The contour shall be wide enough to apply the external perimeter plus compensation on both sides.
 	double min_contour_width = double(external_perimeter_flow.scaled_width() + external_perimeter_flow.scaled_spacing());
 	double scaled_compensation = scale_(compensation);
@@ -369,39 +370,59 @@ ExPolygon elephant_foot_compensation(const ExPolygon &input_expoly, const Flow &
 	// Make the search radius a bit larger for the averaging in contour_distance over a fan of rays to work.
 	double search_radius = min_contour_width_compensated + min_contour_width * 0.5;
 
-	EdgeGrid::Grid grid;
-	ExPolygon simplified = input_expoly.simplify(SCALED_EPSILON).front();
-	BoundingBox bbox = get_extents(simplified.contour);
-	bbox.offset(SCALED_EPSILON);
-	grid.set_bbox(bbox);
-	grid.create(simplified, coord_t(0.7 * search_radius));
-	std::vector<std::vector<float>> deltas;
-	deltas.reserve(simplified.holes.size() + 1);
-	ExPolygon resampled(simplified);
-	double resample_interval = scale_(0.5);
-	for (size_t idx_contour = 0; idx_contour <= simplified.holes.size(); ++ idx_contour) {
-		Polygon &poly = (idx_contour == 0) ? resampled.contour : resampled.holes[idx_contour - 1];
-		std::vector<ResampledPoint> resampled_point_parameters;
-		poly.points = resample_polygon(poly.points, resample_interval, resampled_point_parameters);
-		std::vector<float> dists = contour_distance(grid, idx_contour, poly.points, resampled_point_parameters, search_radius);
-		for (float &d : dists) {
-//			printf("Point %d, Distance: %lf\n", int(&d - dists.data()), unscale<double>(d));
-			// Convert contour width to available compensation distance.
-			if (d < min_contour_width)
-				d = 0.f;
-			else if (d > min_contour_width_compensated)
-				d = - float(scaled_compensation);
-			else
-				d = - (d - float(min_contour_width)) / 2.f;
-			assert(d >= - float(scaled_compensation) && d <= 0.f);
+	BoundingBox bbox = get_extents(input_expoly.contour);
+	Point 		bbox_size = bbox.size();
+	ExPolygon   out;
+	if (bbox_size.x() < min_contour_width_compensated + SCALED_EPSILON ||
+		bbox_size.y() < min_contour_width_compensated + SCALED_EPSILON ||
+		input_expoly.area() < min_contour_width_compensated * min_contour_width_compensated * 5.)
+	{
+		// The contour is tiny. Don't correct it.
+		out = input_expoly;
+	}
+	else
+	{
+		EdgeGrid::Grid grid;
+		ExPolygon simplified = input_expoly.simplify(SCALED_EPSILON).front();
+		BoundingBox bbox = get_extents(simplified.contour);
+		bbox.offset(SCALED_EPSILON);
+		grid.set_bbox(bbox);
+		grid.create(simplified, coord_t(0.7 * search_radius));
+		std::vector<std::vector<float>> deltas;
+		deltas.reserve(simplified.holes.size() + 1);
+		ExPolygon resampled(simplified);
+		double resample_interval = scale_(0.5);
+		for (size_t idx_contour = 0; idx_contour <= simplified.holes.size(); ++ idx_contour) {
+			Polygon &poly = (idx_contour == 0) ? resampled.contour : resampled.holes[idx_contour - 1];
+			std::vector<ResampledPoint> resampled_point_parameters;
+			poly.points = resample_polygon(poly.points, resample_interval, resampled_point_parameters);
+			std::vector<float> dists = contour_distance(grid, idx_contour, poly.points, resampled_point_parameters, search_radius);
+			for (float &d : dists) {
+	//			printf("Point %d, Distance: %lf\n", int(&d - dists.data()), unscale<double>(d));
+				// Convert contour width to available compensation distance.
+				if (d < min_contour_width)
+					d = 0.f;
+				else if (d > min_contour_width_compensated)
+					d = - float(scaled_compensation);
+				else
+					d = - (d - float(min_contour_width)) / 2.f;
+				assert(d >= - float(scaled_compensation) && d <= 0.f);
+			}
+	//		smooth_compensation(dists, 0.4f, 10);
+			smooth_compensation_banded(poly.points, float(0.8 * resample_interval), dists, 0.3f, 3);
+			deltas.emplace_back(dists);
 		}
-//		smooth_compensation(dists, 0.4f, 10);
-		smooth_compensation_banded(poly.points, float(0.8 * resample_interval), dists, 0.3f, 3);
-		deltas.emplace_back(dists);
+
+		ExPolygons out_vec = variable_offset_inner_ex(resampled, deltas, 2.);
+		assert(out_vec.size() == 1);
+		if (out_vec.size() == 1)
+			out = std::move(out_vec.front());
+		else
+			// Something went wrong, don't compensate.
+			out = input_expoly;
 	}
 
-	ExPolygons out = variable_offset_inner_ex(resampled, deltas, 2.);
-	return out.front();
+	return out;
 }
 
 ExPolygons elephant_foot_compensation(const ExPolygons &input, const Flow &external_perimeter_flow, const double compensation)
diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp
index b22d85b65..b76991f1c 100644
--- a/src/libslic3r/ExtrusionEntity.hpp
+++ b/src/libslic3r/ExtrusionEntity.hpp
@@ -267,6 +267,15 @@ public:
 
     //static inline std::string role_to_string(ExtrusionLoopRole role);
 
+#ifndef NDEBUG
+	bool validate() const {
+		assert(this->first_point() == this->paths.back().polyline.points.back());
+		for (size_t i = 1; i < paths.size(); ++ i)
+			assert(this->paths[i - 1].polyline.points.back() == this->paths[i].polyline.points.front());
+		return true;
+	}
+#endif /* NDEBUG */
+
 private:
     ExtrusionLoopRole m_loop_role;
 };
diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp
index 0ba75465f..88eba9a51 100644
--- a/src/libslic3r/Fill/FillBase.cpp
+++ b/src/libslic3r/Fill/FillBase.cpp
@@ -534,7 +534,8 @@ struct ContourPointData {
 // Verify whether the contour from point idx_start to point idx_end could be taken (whether all segments along the contour were not yet extruded).
 static bool could_take(const std::vector<ContourPointData> &contour_data, size_t idx_start, size_t idx_end)
 {
-	for (size_t i = idx_start; i < idx_end; ) {
+	assert(idx_start != idx_end);
+	for (size_t i = idx_start; i != idx_end; ) {
 		if (contour_data[i].segment_consumed || contour_data[i].point_consumed)
 			return false;
 		if (++ i == contour_data.size())
@@ -899,63 +900,86 @@ void Fill::connect_infill(Polylines &&infill_ordered, const ExPolygon &boundary_
 
 	// Mark the points and segments of split boundary as consumed if they are very close to some of the infill line.
 	{
-		const double clip_distance		= scale_(this->spacing);
+		//const double clip_distance		= scale_(this->spacing);
+		const double clip_distance		= 3. * scale_(this->spacing);
 		const double distance_colliding = scale_(this->spacing);
 		mark_boundary_segments_touching_infill(boundary, boundary_data, bbox, infill_ordered, clip_distance, distance_colliding);
 	}
 
-	// Chain infill_ordered.
-	//FIXME run the following loop through a heap sorted by the shortest perimeter edge that could be taken.
-    //length between two lines
+	// Connection from end of one infill line to the start of another infill line.
 	//const float length_max = scale_(this->spacing);
-	const float length_max = scale_((2. / params.density) * this->spacing);
-	size_t idx_chain_last = 0;
+//	const float length_max = scale_((2. / params.density) * this->spacing);
+	const float length_max = scale_((1000. / params.density) * this->spacing);
+	std::vector<size_t> merged_with(infill_ordered.size());
+	for (size_t i = 0; i < merged_with.size(); ++ i)
+		merged_with[i] = i;
+	struct ConnectionCost {
+		ConnectionCost(size_t idx_first, double cost, bool reversed) : idx_first(idx_first), cost(cost), reversed(reversed) {}
+		size_t  idx_first;
+		double  cost;
+		bool 	reversed;
+	};
+	std::vector<ConnectionCost> connections_sorted;
+	connections_sorted.reserve(infill_ordered.size() * 2 - 2);
 	for (size_t idx_chain = 1; idx_chain < infill_ordered.size(); ++ idx_chain) {
-		Polyline &pl1 = infill_ordered[idx_chain_last];
-		Polyline &pl2 = infill_ordered[idx_chain];
+		const Polyline 						&pl1 			= infill_ordered[idx_chain - 1];
+		const Polyline 						&pl2 			= infill_ordered[idx_chain];
 		const std::pair<size_t, size_t>		*cp1			= &map_infill_end_point_to_boundary[(idx_chain - 1) * 2 + 1];
 		const std::pair<size_t, size_t>		*cp2			= &map_infill_end_point_to_boundary[idx_chain * 2];
-		const Points						&contour		= boundary[cp1->first];
-		std::vector<ContourPointData>		&contour_data	= boundary_data[cp1->first];
-		bool valid    = false;
-		bool reversed = false;
+		const std::vector<ContourPointData>	&contour_data	= boundary_data[cp1->first];
 		if (cp1->first == cp2->first) {
 			// End points on the same contour. Try to connect them.
-			float param_lo = (cp1->second == 0) ? 0.f : contour_data[cp1->second].param;
-			float param_hi = (cp2->second == 0) ? 0.f : contour_data[cp2->second].param;
+			float param_lo  = (cp1->second == 0) ? 0.f : contour_data[cp1->second].param;
+			float param_hi  = (cp2->second == 0) ? 0.f : contour_data[cp2->second].param;
 			float param_end = contour_data.front().param;
+			bool  reversed  = false;
 			if (param_lo > param_hi) {
 				std::swap(param_lo, param_hi);
-				std::swap(cp1, cp2);
 				reversed = true;
 			}
 			assert(param_lo >= 0.f && param_lo <= param_end);
 			assert(param_hi >= 0.f && param_hi <= param_end);
-			float dist1 = param_hi - param_lo;
-			float dist2 = param_lo + param_end - param_hi;
-			if (dist1 > dist2) {
-				std::swap(dist1, dist2);
-				std::swap(cp1, cp2);
-				reversed = ! reversed;
-			}
-			if (dist1 < length_max) {
-				// Try to connect the shorter path.
-				valid = could_take(contour_data, cp1->second, cp2->second);
-				// Try to connect the longer path.
-				if (! valid && dist2 < length_max) {
-					std::swap(cp1, cp2);
-					reversed = ! reversed;
-					valid = could_take(contour_data, cp1->second, cp2->second);
-				}
-			}
+			double len = param_hi - param_lo;
+			if (len < length_max)
+				connections_sorted.emplace_back(idx_chain - 1, len, reversed);
+			len = param_lo + param_end - param_hi;
+			if (len < length_max)
+				connections_sorted.emplace_back(idx_chain - 1, len, ! reversed);
 		}
-		if (valid)
-			take(pl1, std::move(pl2), contour, contour_data, cp1->second, cp2->second, reversed);
-		else if (++ idx_chain_last < idx_chain)
-			infill_ordered[idx_chain_last] = std::move(pl2);
 	}
-	infill_ordered.erase(infill_ordered.begin() + idx_chain_last + 1, infill_ordered.end());
-	append(polylines_out, std::move(infill_ordered));
+	std::sort(connections_sorted.begin(), connections_sorted.end(), [](const ConnectionCost& l, const ConnectionCost& r) { return l.cost < r.cost; });
+
+	size_t idx_chain_last = 0;
+	for (ConnectionCost &connection_cost : connections_sorted) {
+		const std::pair<size_t, size_t>	*cp1 = &map_infill_end_point_to_boundary[connection_cost.idx_first * 2 + 1];
+		const std::pair<size_t, size_t>	*cp2 = &map_infill_end_point_to_boundary[(connection_cost.idx_first + 1) * 2];
+		assert(cp1->first == cp2->first);
+		std::vector<ContourPointData>	&contour_data = boundary_data[cp1->first];
+		if (connection_cost.reversed)
+			std::swap(cp1, cp2);
+		if (could_take(contour_data, cp1->second, cp2->second)) {
+			// Indices of the polygons to be connected.
+			size_t idx_first  = connection_cost.idx_first;
+			size_t idx_second = idx_first + 1;
+			for (size_t last = idx_first;;) {
+				size_t lower = merged_with[last];
+				if (lower == last) {
+					merged_with[idx_first] = lower;
+					idx_first = lower;
+					break;
+				}
+				last = lower;
+			}
+			// Connect the two polygons using the boundary contour.
+			take(infill_ordered[idx_first], std::move(infill_ordered[idx_second]), boundary[cp1->first], contour_data, cp1->second, cp2->second, connection_cost.reversed);
+			// Mark the second polygon as merged with the first one.
+			merged_with[idx_second] = merged_with[idx_first];
+		}
+	}
+	polylines_out.reserve(polylines_out.size() + std::count_if(infill_ordered.begin(), infill_ordered.end(), [](const Polyline &pl) { return ! pl.empty(); }));
+	for (Polyline &pl : infill_ordered)
+		if (! pl.empty())
+			polylines_out.emplace_back(std::move(pl));
 }
 
 #endif
diff --git a/src/libslic3r/Fill/FillGyroid.cpp b/src/libslic3r/Fill/FillGyroid.cpp
index e7b4706ac..b12dfb2e7 100644
--- a/src/libslic3r/Fill/FillGyroid.cpp
+++ b/src/libslic3r/Fill/FillGyroid.cpp
@@ -166,7 +166,7 @@ void FillGyroid::_fill_surface_single(
     bb.merge(_align_to_grid(bb.min, Point(2*M_PI*distance, 2*M_PI*distance)));
 
     // generate pattern
-    Polylines polylines_square = make_gyroid_waves(
+    Polylines polylines = make_gyroid_waves(
         scale_(this->z),
         density_adjusted,
         this->spacing,
@@ -174,22 +174,25 @@ void FillGyroid::_fill_surface_single(
         ceil(bb.size()(1) / distance) + 1.);
 
 	// shift the polyline to the grid origin
-	for (Polyline &pl : polylines_square)
+	for (Polyline &pl : polylines)
 		pl.translate(bb.min);
 
-	Polylines polylines_chained = chain_polylines(intersection_pl(polylines_square, to_polygons(expolygon)));
+	polylines = intersection_pl(polylines, to_polygons(expolygon));
 
-    size_t polylines_out_first_idx = polylines_out.size();
-    if (! polylines_chained.empty()) {
-        // connect lines
+    if (! polylines.empty())
+		// remove too small bits (larger than longer)
+		polylines.erase(
+			std::remove_if(polylines.begin(), polylines.end(), [this](const Polyline &pl) { return pl.length() < scale_(this->spacing * 3); }),
+			polylines.end());
+
+	if (! polylines.empty()) {
+		polylines = chain_polylines(polylines);
+		// connect lines
+		size_t polylines_out_first_idx = polylines_out.size();
 		if (params.dont_connect)
-        	append(polylines_out, std::move(polylines_chained));
+        	append(polylines_out, std::move(polylines));
         else
-            this->connect_infill(std::move(polylines_chained), expolygon, polylines_out, params);
-	    // remove too small bits (larger than longer)
-	    polylines_out.erase(
-	    	std::remove_if(polylines_out.begin() + polylines_out_first_idx, polylines_out.end(), [this](const Polyline &pl){ return pl.length() < scale_(this->spacing * 3); }),
-	    	polylines_out.end());
+            this->connect_infill(std::move(polylines), expolygon, polylines_out, params);
 	    // new paths must be rotated back
 	    if (abs(infill_angle) >= EPSILON) {
 	        for (auto it = polylines_out.begin() + polylines_out_first_idx; it != polylines_out.end(); ++ it)
diff --git a/src/libslic3r/KDTreeIndirect.hpp b/src/libslic3r/KDTreeIndirect.hpp
index 3cccfdafa..239008559 100644
--- a/src/libslic3r/KDTreeIndirect.hpp
+++ b/src/libslic3r/KDTreeIndirect.hpp
@@ -46,9 +46,9 @@ public:
 		if (indices.empty())
 			clear();
 		else {
-			// Allocate a next highest power of 2 nodes, because the incomplete binary tree will not have the leaves filled strictly from the left.
+			// Allocate enough memory for a full binary tree.
 			m_nodes.assign(next_highest_power_of_2(indices.size() + 1), npos);
-			build_recursive(indices, 0, 0, 0, (int)(indices.size() - 1));
+			build_recursive(indices, 0, 0, 0, indices.size() - 1);
 		}
 		indices.clear();
 	}
@@ -81,7 +81,7 @@ public:
 
 private:
 	// Build a balanced tree by splitting the input sequence by an axis aligned plane at a dimension.
-	void build_recursive(std::vector<size_t> &input, size_t node, int dimension, int left, int right)
+	void build_recursive(std::vector<size_t> &input, size_t node, const size_t dimension, const size_t left, const size_t right)
 	{
 		if (left > right)
 			return;
@@ -94,54 +94,56 @@ private:
 			return;
 		}
 
-		// Partition the input sequence to two equal halves.
-		int center = (left + right) >> 1;
+		// Partition the input to left / right pieces of the same length to produce a balanced tree.
+		size_t center = (left + right) / 2;
 		partition_input(input, dimension, left, right, center);
 		// Insert a node into the tree.
 		m_nodes[node] = input[center];
-		// Partition the left and right subtrees.
-		size_t next_dimension = (++ dimension == NumDimensions) ? 0 : dimension;
-		build_recursive(input, (node << 1) + 1, next_dimension, left,	    center - 1);
-		build_recursive(input, (node << 1) + 2, next_dimension, center + 1, right);
+		// Build up the left / right subtrees.
+		size_t next_dimension = dimension;
+		if (++ next_dimension == NumDimensions)
+			next_dimension = 0;
+		if (center > left)
+			build_recursive(input, node * 2 + 1, next_dimension, left, center - 1);
+		build_recursive(input, node * 2 + 2, next_dimension, center + 1, right);
 	}
 
-	// Partition the input m_nodes <left, right> at k using QuickSelect method.
+	// Partition the input m_nodes <left, right> at "k" and "dimension" using the QuickSelect method:
 	// https://en.wikipedia.org/wiki/Quickselect
-	void partition_input(std::vector<size_t> &input, int dimension, int left, int right, int k) const
+	// Items left of the k'th item are lower than the k'th item in the "dimension", 
+	// items right of the k'th item are higher than the k'th item in the "dimension", 
+	void partition_input(std::vector<size_t> &input, const size_t dimension, size_t left, size_t right, const size_t k) const
 	{
 		while (left < right) {
-			// Guess the k'th element.
-			// Pick the pivot as a median of first, center and last value.
-			// Sort first, center and last values.
-			int  center       = (left + right) >> 1;
-			auto left_value   = this->coordinate(input[left],   dimension);
-			auto center_value = this->coordinate(input[center], dimension);
-			auto right_value  = this->coordinate(input[right],  dimension);
-			if (center_value < left_value) {
-				std::swap(input[left], input[center]);
-				std::swap(left_value,  center_value);
+			size_t center = (left + right) / 2;
+			CoordType pivot;
+			{
+				// Bubble sort the input[left], input[center], input[right], so that a median of the three values
+				// will end up in input[center].
+				CoordType left_value   = this->coordinate(input[left],   dimension);
+				CoordType center_value = this->coordinate(input[center], dimension);
+				CoordType right_value  = this->coordinate(input[right],  dimension);
+				if (left_value > center_value) {
+					std::swap(input[left], input[center]);
+					std::swap(left_value,  center_value);
+				}
+				if (left_value > right_value) {
+					std::swap(input[left], input[right]);
+					right_value = left_value;
+				}
+				if (center_value > right_value) {
+					std::swap(input[center], input[right]);
+					center_value = right_value;
+				}
+				pivot = center_value;
 			}
-			if (right_value < left_value) {
-				std::swap(input[left], input[right]);
-				std::swap(left_value,  right_value);
-			}
-			if (right_value < center_value) {
-				std::swap(input[center], input[right]);
-				// No need to do that, result is not used.
-				// std::swap(center_value,  right_value);
-			}
-			// Only two or three values are left and those are sorted already.
-			if (left + 3 > right)
+			if (right <= left + 2)
+				// The <left, right> interval is already sorted.
 				break;
-			// left and right items are already at their correct positions.
-			// input[left].point[dimension] <= input[center].point[dimension] <= input[right].point[dimension]
-			// Move the pivot to the (right - 1) position.
-			std::swap(input[center], input[right - 1]);
-			// Pivot value.
-			double pivot = this->coordinate(input[right - 1],  dimension);
+			size_t i = left;
+			size_t j = right - 1;
+			std::swap(input[center], input[j]);
 			// Partition the set based on the pivot.
-			int i = left;
-			int j = right - 1;
 			for (;;) {
 				// Skip left points that are already at correct positions.
 				// Search will certainly stop at position (right - 1), which stores the pivot.
@@ -153,7 +155,7 @@ private:
 				std::swap(input[i], input[j]);
 			}
 			// Restore pivot to the center of the sequence.
-			std::swap(input[i], input[right]);
+			std::swap(input[i], input[right - 1]);
 			// Which side the kth element is in?
 			if (k < i)
 				right = i - 1;
@@ -173,7 +175,7 @@ private:
 			return;
 
 		// Left / right child node index.
-		size_t left  = (node << 1) + 1;
+		size_t left  = node * 2 + 1;
 		size_t right = left + 1;
 		unsigned int mask = visitor(m_nodes[node], dimension);
 		if ((mask & (unsigned int)VisitorReturnMask::STOP) == 0) {
diff --git a/src/libslic3r/ShortestPath.cpp b/src/libslic3r/ShortestPath.cpp
index a0fb05005..b38655e68 100644
--- a/src/libslic3r/ShortestPath.cpp
+++ b/src/libslic3r/ShortestPath.cpp
@@ -237,11 +237,19 @@ std::vector<std::pair<size_t, bool>> chain_segments_greedy_constrained_reversals
 
 	    // Chain the end points: find (num_segments - 1) shortest links not forming bifurcations or loops.
 		assert(num_segments >= 2);
+#ifndef NDEBUG
+		double distance_taken_last = 0.;
+#endif /* NDEBUG */
 		for (int iter = int(num_segments) - 2;; -- iter) {
 			assert(validate_graph_and_queue());
 	    	// Take the first end point, for which the link points to the currently closest valid neighbor.
 	    	EndPoint &end_point1 = *queue.top();
-	    	assert(end_point1.edge_out != nullptr);
+#ifndef NDEBUG
+			// Each edge added shall be longer than the previous one taken.
+			assert(end_point1.distance_out > distance_taken_last - SCALED_EPSILON);
+			distance_taken_last = end_point1.distance_out;
+#endif /* NDEBUG */
+			assert(end_point1.edge_out != nullptr);
 	    	// No point on the queue may be connected yet.
 	    	assert(end_point1.chain_id == 0);
 	    	// Take the closest end point to the first end point,
@@ -313,6 +321,10 @@ std::vector<std::pair<size_t, bool>> chain_segments_greedy_constrained_reversals
 				assert(next_idx < end_points.size());
 				end_point1.edge_out = &end_points[next_idx];
 				end_point1.distance_out = (end_points[next_idx].pos - end_point1.pos).squaredNorm();
+#ifndef NDEBUG
+				// Each edge shall be longer than the last one removed from the queue.
+				assert(end_point1.distance_out > distance_taken_last - SCALED_EPSILON);
+#endif /* NDEBUG */
 				// Update position of this end point in the queue based on the distance calculated at the line above.
 				queue.update(end_point1.heap_idx);
 		    	//FIXME Remove the other end point from the KD tree.
@@ -460,18 +472,206 @@ std::vector<size_t> chain_points(const Points &points, Point *start_near)
 	return out;
 }
 
+// Flip the sequences of polylines to lower the total length of connecting lines.
+// #define DEBUG_SVG_OUTPUT
+static inline void improve_ordering_by_segment_flipping(Polylines &polylines, bool fixed_start)
+{
+#ifndef NDEBUG
+	auto cost = [&polylines]() {
+		double sum = 0.;
+		for (size_t i = 1; i < polylines.size(); ++i)
+			sum += (polylines[i].first_point() - polylines[i - 1].last_point()).cast<double>().norm();
+		return sum;
+	};
+	double cost_initial = cost();
+
+	static int iRun = 0;
+	++ iRun;
+	BoundingBox bbox = get_extents(polylines);
+#ifdef DEBUG_SVG_OUTPUT
+	{
+		SVG svg(debug_out_path("improve_ordering_by_segment_flipping-initial-%d.svg", iRun).c_str(), bbox);
+		svg.draw(polylines);
+		for (size_t i = 1; i < polylines.size(); ++ i)
+			svg.draw(Line(polylines[i - 1].last_point(), polylines[i].first_point()), "red");
+	}
+#endif /* DEBUG_SVG_OUTPUT */
+#endif /* NDEBUG */
+
+	struct Connection {
+		Connection(size_t heap_idx = std::numeric_limits<size_t>::max(), bool flipped = false) : heap_idx(heap_idx), flipped(flipped) {}
+		// Position of this object on MutablePriorityHeap.
+		size_t 	heap_idx;
+		// Is segment_idx flipped?
+		bool   	flipped;
+
+		double 			squaredNorm(const Polylines &polylines, const std::vector<Connection> &connections) const 
+			{ return ((this + 1)->start_point(polylines, connections) - this->end_point(polylines, connections)).squaredNorm(); }
+		double 			norm(const Polylines &polylines, const std::vector<Connection> &connections) const 
+			{ return sqrt(this->squaredNorm(polylines, connections)); }
+		double 			squaredNorm(const Polylines &polylines, const std::vector<Connection> &connections, bool try_flip1, bool try_flip2) const 
+			{ return ((this + 1)->start_point(polylines, connections, try_flip2) - this->end_point(polylines, connections, try_flip1)).squaredNorm(); }
+		double 			norm(const Polylines &polylines, const std::vector<Connection> &connections, bool try_flip1, bool try_flip2) const
+			{ return sqrt(this->squaredNorm(polylines, connections, try_flip1, try_flip2)); }
+		Vec2d			start_point(const Polylines &polylines, const std::vector<Connection> &connections, bool flip = false) const 
+			{ const Polyline &pl = polylines[this - connections.data()]; return ((this->flipped == flip) ? pl.points.front() : pl.points.back()).cast<double>(); }
+		Vec2d			end_point(const Polylines &polylines, const std::vector<Connection> &connections, bool flip = false) const 
+			{ const Polyline &pl = polylines[this - connections.data()]; return ((this->flipped == flip) ? pl.points.back() : pl.points.front()).cast<double>(); }
+
+		bool 			in_queue() const { return this->heap_idx != std::numeric_limits<size_t>::max(); }
+		void 			flip() { this->flipped = ! this->flipped; }
+	};
+	std::vector<Connection> connections(polylines.size());
+
+#ifndef NDEBUG
+	auto cost_flipped = [fixed_start, &polylines, &connections]() {
+		assert(! fixed_start || ! connections.front().flipped);
+		double sum = 0.;
+		for (size_t i = 1; i < polylines.size(); ++ i)
+			sum += connections[i - 1].norm(polylines, connections);
+		return sum;
+	};
+	double cost_prev = cost_flipped();
+	assert(std::abs(cost_initial - cost_prev) < SCALED_EPSILON);
+
+	auto print_statistics = [&polylines, &connections]() {
+#if 0
+		for (size_t i = 1; i < polylines.size(); ++ i)
+			printf("Connecting %d with %d: Current length %lf flip(%d, %d), left flipped: %lf, right flipped: %lf, both flipped: %lf, \n",
+				int(i - 1), int(i),
+				unscale<double>(connections[i - 1].norm(polylines, connections)),
+				int(connections[i - 1].flipped), int(connections[i].flipped),
+				unscale<double>(connections[i - 1].norm(polylines, connections, true, false)),
+				unscale<double>(connections[i - 1].norm(polylines, connections, false, true)),
+				unscale<double>(connections[i - 1].norm(polylines, connections, true, true)));
+#endif
+	};
+	print_statistics();
+#endif /* NDEBUG */
+
+    // Initialize a MutablePriorityHeap of connections between polylines.
+    auto queue = make_mutable_priority_queue<Connection*>(
+		[](Connection *connection, size_t idx){ connection->heap_idx = idx; },
+		// Sort by decreasing connection distance.
+    	[&polylines, &connections](Connection *l, Connection *r){ return l->squaredNorm(polylines, connections) > r->squaredNorm(polylines, connections); });
+	queue.reserve(polylines.size() - 1);
+    for (size_t i = 0; i + 1 < polylines.size(); ++ i)
+		queue.push(&connections[i]);
+
+	static constexpr size_t itercnt = 100;
+	size_t iter = 0;
+	for (; ! queue.empty() && iter < itercnt; ++ iter) {
+		Connection &connection = *queue.top();
+		queue.pop();
+		connection.heap_idx = std::numeric_limits<size_t>::max();
+		size_t idx_first = &connection - connections.data();
+		// Try to flip segments starting with idx_first + 1 to the end.
+		// Calculate the last segment to be flipped to improve the total path length.
+		double length_current 			= connection.norm(polylines, connections);
+		double length_flipped 			= connection.norm(polylines, connections, false, true);
+		int    best_idx_forward			= int(idx_first);
+		double best_improvement_forward = 0.;
+		for (size_t i = idx_first + 1; i + 1 < connections.size(); ++ i) {
+			length_current += connections[i].norm(polylines, connections);
+			double this_improvement = length_current - length_flipped - connections[i].norm(polylines, connections, true, false);
+			length_flipped += connections[i].norm(polylines, connections, true, true);
+			if (this_improvement > best_improvement_forward) {
+				best_improvement_forward = this_improvement;
+				best_idx_forward = int(i);
+			}
+//			if (length_flipped > 1.5 * length_current)
+//				break;
+		}
+		if (length_current - length_flipped > best_improvement_forward)
+			// Best improvement by flipping up to the end.
+			best_idx_forward = int(connections.size()) - 1;
+		// Try to flip segments starting with idx_first - 1 to the start.
+		// Calculate the last segment to be flipped to improve the total path length.
+		length_current 					  = connection.norm(polylines, connections);
+		length_flipped					  = connection.norm(polylines, connections, true, false);
+		int    best_idx_backwards		  = int(idx_first);
+		double best_improvement_backwards = 0.;
+		for (int i = int(idx_first) - 1; i >= 0; -- i) {
+			length_current += connections[i].norm(polylines, connections);
+			double this_improvement = length_current - length_flipped - connections[i].norm(polylines, connections, false, true);
+			length_flipped += connections[i].norm(polylines, connections, true, true);
+			if (this_improvement > best_improvement_backwards) {
+				best_improvement_backwards = this_improvement;
+				best_idx_backwards = int(i);
+			}
+//			if (length_flipped > 1.5 * length_current)
+//				break;
+		}
+		if (! fixed_start && length_current - length_flipped > best_improvement_backwards)
+			// Best improvement by flipping up to the start including the first polyline.
+			best_idx_backwards = -1;
+		int update_begin = int(idx_first);
+		int update_end   = best_idx_forward;
+		if (best_improvement_backwards > 0. && best_improvement_backwards > best_improvement_forward) {
+			// Flip the sequence of polylines from idx_first to best_improvement_forward + 1.
+			update_begin = best_idx_backwards;
+			update_end   = int(idx_first);
+		}
+		assert(update_begin <= update_end);
+		if (update_begin == update_end)
+			continue;
+		for (int i = update_begin + 1; i <= update_end; ++ i)
+			connections[i].flip();
+
+#ifndef NDEBUG
+		double cost = cost_flipped();
+		assert(cost < cost_prev);
+		cost_prev = cost;
+		print_statistics();
+#endif /* NDEBUG */
+
+		update_end = std::min(update_end + 1, int(connections.size()) - 1);
+		for (int i = std::max(0, update_begin); i < update_end; ++ i) {
+			Connection &c = connections[i];
+			if (c.in_queue())
+				queue.update(c.heap_idx);
+			else
+				queue.push(&c);
+		}
+	}
+
+	// Flip the segments based on the flip flag.
+	for (Polyline &pl : polylines)
+		if (connections[&pl - polylines.data()].flipped)
+			pl.reverse();
+
+#ifndef NDEBUG
+	double cost_final = cost();
+#ifdef DEBUG_SVG_OUTPUT
+	{
+		SVG svg(debug_out_path("improve_ordering_by_segment_flipping-final-%d.svg", iRun).c_str(), bbox);
+		svg.draw(polylines);
+		for (size_t i = 1; i < polylines.size(); ++ i)
+		svg.draw(Line(polylines[i - 1].last_point(), polylines[i].first_point()), "red");
+	}
+#endif /* DEBUG_SVG_OUTPUT */
+#endif /* NDEBUG */
+
+	assert(cost_final <= cost_prev);
+	assert(cost_final <= cost_initial);
+}
+
 Polylines chain_polylines(Polylines &&polylines, const Point *start_near)
 {
-	auto segment_end_point = [&polylines](size_t idx, bool first_point) -> const Point& { return first_point ? polylines[idx].first_point() : polylines[idx].last_point(); };
-	std::vector<std::pair<size_t, bool>> ordered = chain_segments_greedy<Point, decltype(segment_end_point)>(segment_end_point, polylines.size(), start_near);
 	Polylines out;
-	out.reserve(polylines.size()); 
-	for (auto &segment_and_reversal : ordered) {
-		out.emplace_back(std::move(polylines[segment_and_reversal.first]));
-		if (segment_and_reversal.second)
-			out.back().reverse();
+	if (! polylines.empty()) {
+		auto segment_end_point = [&polylines](size_t idx, bool first_point) -> const Point& { return first_point ? polylines[idx].first_point() : polylines[idx].last_point(); };
+		std::vector<std::pair<size_t, bool>> ordered = chain_segments_greedy<Point, decltype(segment_end_point)>(segment_end_point, polylines.size(), start_near);
+		out.reserve(polylines.size()); 
+		for (auto &segment_and_reversal : ordered) {
+			out.emplace_back(std::move(polylines[segment_and_reversal.first]));
+			if (segment_and_reversal.second)
+				out.back().reverse();
+		}
+		if (out.size() > 1)
+			improve_ordering_by_segment_flipping(out, start_near != nullptr);
 	}
-	return out;	
+	return out;
 }
 
 template<class T> static inline T chain_path_items(const Points &points, const T &items)
diff --git a/tests/libslic3r/test_elephant_foot_compensation.cpp b/tests/libslic3r/test_elephant_foot_compensation.cpp
index 9a7e65264..e5ea97e68 100644
--- a/tests/libslic3r/test_elephant_foot_compensation.cpp
+++ b/tests/libslic3r/test_elephant_foot_compensation.cpp
@@ -222,6 +222,21 @@ static ExPolygon vase_with_fins()
 
 SCENARIO("Elephant foot compensation", "[ElephantFoot]") {
 
+	GIVEN("Tiny contour") {
+		ExPolygon expoly({ { 133382606, 94912473 }, { 134232493, 95001115 }, { 133783926, 95159440 }, { 133441897, 95180666 }, { 133408242, 95191984 }, { 133339012, 95166830 }, { 132991642, 95011087 }, { 133206549, 94908304 } });
+		WHEN("Compensated") {
+			ExPolygon expoly_compensated = elephant_foot_compensation(expoly, Flow(0.419999987f, 0.2f, 0.4f, false), 0.2f);
+#ifdef TESTS_EXPORT_SVGS
+			SVG::export_expolygons(debug_out_path("elephant_foot_compensation_tiny.svg").c_str(),
+				{ { { expoly },             { "gray", "black", "blue", coord_t(scale_(0.02)), 0.5f, "black", coord_t(scale_(0.05)) } },
+				  { { expoly_compensated }, { "gray", "black", "blue", coord_t(scale_(0.02)), 0.5f, "black", coord_t(scale_(0.05)) } } });
+#endif /* TESTS_EXPORT_SVGS */
+			THEN("Tiny contour is not compensated") {
+				REQUIRE(expoly_compensated == expoly);
+			}
+		}
+	}
+
 	GIVEN("Large box") {
 		ExPolygon expoly( { {50000000, 50000000 }, { 0, 50000000 }, { 0, 0 }, { 50000000, 0 } } );
         WHEN("Compensated") {
diff --git a/tests/libslic3r/test_geometry.cpp b/tests/libslic3r/test_geometry.cpp
index 22755c262..4a800b3d3 100644
--- a/tests/libslic3r/test_geometry.cpp
+++ b/tests/libslic3r/test_geometry.cpp
@@ -252,15 +252,39 @@ SCENARIO("Circle Fit, TaubinFit with Newton's method", "[Geometry]") {
     }
 }
 
-TEST_CASE("Chained path working correctly", "[Geometry]"){
-    // if chained_path() works correctly, these points should be joined with no diagonal paths
-    // (thus 26 units long)
-    std::vector<Point> points = {Point(26,26),Point(52,26),Point(0,26),Point(26,52),Point(26,0),Point(0,52),Point(52,52),Point(52,0)};
-    std::vector<Points::size_type> indices = chain_points(points);
-    for (Points::size_type i = 0; i + 1 < indices.size(); ++ i) {
-        double dist = (points.at(indices.at(i)).cast<double>() - points.at(indices.at(i+1)).cast<double>()).norm();
-        REQUIRE(std::abs(dist-26) <= EPSILON);
-    }
+SCENARIO("Path chaining", "[Geometry]") {
+	GIVEN("A path") {
+		std::vector<Point> points = { Point(26,26),Point(52,26),Point(0,26),Point(26,52),Point(26,0),Point(0,52),Point(52,52),Point(52,0) };
+		THEN("Chained with no diagonals (thus 26 units long)") {
+			std::vector<Points::size_type> indices = chain_points(points);
+			for (Points::size_type i = 0; i + 1 < indices.size(); ++ i) {
+				double dist = (points.at(indices.at(i)).cast<double>() - points.at(indices.at(i+1)).cast<double>()).norm();
+				REQUIRE(std::abs(dist-26) <= EPSILON);
+			}
+		}
+	}
+	GIVEN("Loop pieces") {
+		Point a { 2185796, 19058485 };
+		Point b { 3957902, 18149382 };
+		Point c { 2912841, 18790564 };
+		Point d { 2831848, 18832390 };
+		Point e { 3179601, 18627769 };
+		Point f { 3137952, 18653370 };
+		Polylines polylines = { { a, b },
+								{ c, d },
+								{ e, f },
+								{ d, a },
+								{ f, c },
+								{ b, e } };
+		Polylines chained = chain_polylines(polylines, &a);
+		THEN("Connected without a gap") {
+			for (size_t i = 0; i < chained.size(); ++i) {
+				const Polyline &pl1 = (i == 0) ? chained.back() : chained[i - 1];
+				const Polyline &pl2 = chained[i];
+				REQUIRE(pl1.points.back() == pl2.points.front());
+			}
+		}
+	}
 }
 
 SCENARIO("Line distances", "[Geometry]"){

From 840c59cd3d64ddbe616f5d599dca4db1794c32e9 Mon Sep 17 00:00:00 2001
From: YuSanka <yusanka@gmail.com>
Date: Fri, 15 Nov 2019 08:32:19 +0100
Subject: [PATCH 80/84] Added new PrusaResearch.ini (with MINI and aliases)

---
 resources/profiles/PrusaResearch.ini | 1269 ++++++++++++++++++++++----
 1 file changed, 1105 insertions(+), 164 deletions(-)

diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini
index 9add73b4d..bc41fab6b 100644
--- a/resources/profiles/PrusaResearch.ini
+++ b/resources/profiles/PrusaResearch.ini
@@ -5,7 +5,7 @@
 name = Prusa Research
 # Configuration version of this file. Config file will only be installed, if the config_version differs.
 # This means, the server may force the PrusaSlicer configuration to be downgraded.
-config_version = 1.0.1
+config_version = 1.0.4
 # Where to get the updates from?
 config_update_url = http://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
 changelog_url = http://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
@@ -16,6 +16,13 @@ changelog_url = http://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
 #for example by the melt zone size, or whether the nozzle is hardened.
 # Printer model name will be shown by the installation wizard.
 
+
+[printer_model:MINI]
+name = Original Prusa MINI
+variants = 0.4; 0.25
+technology = FFF
+family = MINI
+
 [printer_model:MK3S]
 name = Original Prusa i3 MK3S
 variants = 0.4; 0.25; 0.6
@@ -82,29 +89,6 @@ variants = default
 technology = SLA
 family = SL1
 
-[default_filaments]
-Generic PLA = 1
-Generic PLA MMU2 = 1
-Prusa PLA = 1
-Prusa PLA MMU2 = 1
-Prusament PLA = 1
-Prusament PLA MMU2 = 1
-
-[default_sla_materials]
-Prusa Azure Blue Tough 0.05 = 1
-Prusa Black Tough 0.05 = 1
-Prusa Green Casting 0.05 = 1
-Prusa Grey Tough 0.05 = 1
-Prusa Maroon Tough 0.05 = 1
-Prusa Orange Tough 0.025 = 1
-Prusa Orange Tough 0.035 = 1
-Prusa Orange Tough 0.05 = 1
-Prusa Orange Tough 0.1 = 1
-Prusa Pink Tough 0.05 = 1
-Prusa Skin Tough 0.05 = 1
-Prusa Transparent Red Tough 0.05 = 1
-Prusa White Tough 0.05 = 1
-
 # All presets starting with asterisk, for example *common*, are intermediate and they will
 # not make it into the user interface.
 
@@ -222,11 +206,24 @@ travel_speed = 180
 wipe_tower_x = 170
 wipe_tower_y = 125
 
+## MINI
+
+[print:*MINI*]
+fill_pattern = grid
+travel_speed = 150
+wipe_tower = 0
+default_acceleration = 1250
+first_layer_acceleration = 800
+infill_acceleration = 1000
+bridge_acceleration = 1000
+support_material_speed = 40
+max_print_speed = 150
+
 # Print parameters common to a 0.25mm diameter nozzle.
 [print:*0.25nozzle*]
 external_perimeter_extrusion_width = 0.25
 extrusion_width = 0.25
-first_layer_extrusion_width = 0.25
+first_layer_extrusion_width = 0.3
 infill_extrusion_width = 0.25
 perimeter_extrusion_width = 0.25
 solid_infill_extrusion_width = 0.25
@@ -241,7 +238,7 @@ output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_heig
 [print:*0.25nozzleMK3*]
 external_perimeter_extrusion_width = 0.25
 extrusion_width = 0.25
-first_layer_extrusion_width = 0.35
+first_layer_extrusion_width = 0.3
 infill_extrusion_width = 0.25
 perimeter_extrusion_width = 0.25
 solid_infill_extrusion_width = 0.25
@@ -271,6 +268,38 @@ fill_pattern = grid
 fill_density = 20%
 output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
 
+[print:*0.25nozzleMINI*]
+external_perimeter_extrusion_width = 0.25
+extrusion_width = 0.25
+first_layer_extrusion_width = 0.3
+infill_extrusion_width = 0.25
+perimeter_extrusion_width = 0.25
+solid_infill_extrusion_width = 0.25
+top_infill_extrusion_width = 0.25
+support_material_extrusion_width = 0.2
+support_material_interface_layers = 0
+support_material_interface_spacing = 0.15
+support_material_spacing = 1
+support_material_xy_spacing = 150%
+perimeter_speed = 30
+external_perimeter_speed = 20
+small_perimeter_speed = 20
+infill_speed = 40
+solid_infill_speed = 40
+top_solid_infill_speed = 30
+support_material_speed = 40
+bridge_speed = 20
+gap_fill_speed = 30
+perimeter_acceleration = 500
+infill_acceleration = 800
+bridge_acceleration = 500
+first_layer_acceleration = 500
+max_print_speed = 80
+perimeters = 3
+fill_pattern = grid
+fill_density = 20%
+output_filename_format = {input_filename_base}_{nozzle_diameter[0]}n_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
+
 # Print parameters common to a 0.6mm diameter nozzle.
 [print:*0.6nozzle*]
 external_perimeter_extrusion_width = 0.61
@@ -324,7 +353,7 @@ inherits = *common*
 bottom_solid_layers = 10
 bridge_acceleration = 300
 bridge_flow_ratio = 0.7
-default_acceleration = 500
+default_acceleration = 1000
 external_perimeter_speed = 20
 fill_density = 20%
 first_layer_acceleration = 500
@@ -346,12 +375,14 @@ top_solid_layers = 15
 
 [print:0.05mm ULTRADETAIL]
 inherits = *0.05mm*
+alias = 0.05mm ULTRADETAIL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1
 infill_extrusion_width = 0.5
 
 # MK3 #
 [print:0.05mm ULTRADETAIL MK3]
 inherits = *0.05mm*; *MK3*
+alias = 0.05mm ULTRADETAIL
 fill_pattern = gyroid
 fill_density = 15%
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/  and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material
@@ -360,6 +391,7 @@ top_infill_extrusion_width = 0.4
 # MK2 #
 [print:0.05mm ULTRADETAIL 0.25 nozzle]
 inherits = *0.05mm*; *0.25nozzle*
+alias = 0.05mm ULTRADETAIL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25 and num_extruders==1
 fill_density = 20%
 infill_speed = 20
@@ -372,10 +404,10 @@ support_material_speed = 20
 # MK3 #
 [print:0.05mm ULTRADETAIL 0.25 nozzle MK3]
 inherits = *0.05mm*; *0.25nozzle*; *MK3*
+alias = 0.05mm ULTRADETAIL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.25 and num_extruders==1
 fill_pattern = grid
 fill_density = 20%
-first_layer_extrusion_width = 0.35
 
 # XXXXXXXXXXXXXXXXXXXX
 # XXX--- 0.07mm ---XXX
@@ -387,7 +419,7 @@ bottom_solid_layers = 8
 bridge_acceleration = 300
 bridge_flow_ratio = 0.7
 bridge_speed = 20
-default_acceleration = 500
+default_acceleration = 1000
 external_perimeter_speed = 20
 fill_density = 15%
 first_layer_acceleration = 500
@@ -410,12 +442,14 @@ top_solid_layers = 11
 # MK3 #
 [print:0.07mm ULTRADETAIL MK3]
 inherits = *0.07mm*; *MK3*
+alias = 0.07mm ULTRADETAIL
 fill_pattern = gyroid
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/  and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material
 top_infill_extrusion_width = 0.4
 
 [print:0.07mm ULTRADETAIL 0.25 nozzle MK3]
 inherits = *0.07mm*; *0.25nozzle*; *MK3*
+alias = 0.07mm ULTRADETAIL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.25 and num_extruders==1
 infill_speed = 30
 solid_infill_speed = 30
@@ -423,7 +457,6 @@ support_material_speed = 30
 top_solid_infill_speed = 20
 fill_pattern = grid
 fill_density = 20%
-first_layer_extrusion_width = 0.35
 
 # XXXXXXXXXXXXXXXXXXXX
 # XXX--- 0.10mm ---XXX
@@ -442,6 +475,7 @@ top_solid_layers = 9
 # MK2 #
 [print:0.10mm DETAIL]
 inherits = *0.10mm*
+alias = 0.10mm DETAIL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.4 and num_extruders==1
 external_perimeter_speed = 40
 infill_acceleration = 2000
@@ -452,6 +486,7 @@ solid_infill_speed = 50
 # MK3 #
 [print:0.10mm DETAIL MK3]
 inherits = *0.10mm*; *MK3*
+alias = 0.10mm DETAIL
 bridge_speed = 30
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material
 external_perimeter_speed = 25
@@ -468,10 +503,11 @@ fill_density = 15%
 # MK2 #
 [print:0.10mm DETAIL 0.25 nozzle]
 inherits = *0.10mm*; *0.25nozzle*
+alias = 0.10mm DETAIL
 bridge_acceleration = 600
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25
 external_perimeter_speed = 20
-infill_acceleration = 1600
+infill_acceleration = 1000
 infill_speed = 40
 perimeter_acceleration = 600
 perimeter_speed = 25
@@ -482,6 +518,7 @@ top_solid_infill_speed = 30
 # MK3 #
 [print:0.10mm DETAIL 0.25 nozzle MK3]
 inherits = *0.10mm*; *0.25nozzleMK3*; *MK3*
+alias = 0.10mm DETAIL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.25
 fill_pattern = grid
 fill_density = 20%
@@ -520,17 +557,19 @@ top_solid_infill_speed = 70
 # MK2 #
 [print:0.15mm OPTIMAL]
 inherits = *0.15mm*
+alias = 0.15mm OPTIMAL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4
 top_infill_extrusion_width = 0.45
 
 # MK2 #
 [print:0.15mm OPTIMAL 0.25 nozzle]
 inherits = *0.15mm*; *0.25nozzle*
+alias = 0.15mm OPTIMAL
 bridge_acceleration = 600
 bridge_flow_ratio = 0.7
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.25
 external_perimeter_speed = 20
-infill_acceleration = 1600
+infill_acceleration = 1000
 infill_speed = 40
 perimeter_acceleration = 600
 perimeter_speed = 25
@@ -541,11 +580,13 @@ top_solid_infill_speed = 30
 # MK2 #
 [print:0.15mm OPTIMAL 0.6 nozzle]
 inherits = *0.15mm*; *0.6nozzle*
+alias = 0.15mm OPTIMAL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6
 
 # MK3 #
 [print:0.15mm QUALITY MK3]
 inherits = *0.15mm*; *MK3*
+alias = 0.15mm QUALITY
 bridge_speed = 30
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4
 external_perimeter_speed = 25
@@ -560,6 +601,7 @@ fill_density = 15%
 
 [print:0.15mm SPEED MK3]
 inherits = *0.15mm*; *MK3*
+alias = 0.15mm SPEED
 bridge_speed = 30
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4
 external_perimeter_speed = 35
@@ -573,6 +615,7 @@ top_solid_infill_speed = 50
 # MK3 MMU #
 [print:0.15mm SOLUBLE FULL MK3]
 inherits = 0.15mm SPEED MK3; *soluble_support*
+alias = 0.15mm SOLUBLE FULL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
 notes = Set your soluble extruder in Multiple Extruders > Support material/raft/skirt extruder &  Support material/raft interface extruder
 support_material_extruder = 5
@@ -585,6 +628,7 @@ top_solid_infill_speed = 30
 # MK3 MMU #
 [print:0.15mm SOLUBLE INTERFACE MK3]
 inherits = 0.15mm SOLUBLE FULL MK3
+alias = 0.15mm SOLUBLE INTERFACE
 notes = Set your soluble extruder in Multiple Extruders >  Support material/raft interface extruder
 support_material_extruder = 0
 support_material_interface_layers = 3
@@ -593,6 +637,7 @@ support_material_with_sheath = 0
 # MK2 MMU #
 [print:0.15mm OPTIMAL SOLUBLE FULL]
 inherits = *0.15mm*; *soluble_support*
+alias = 0.15mm OPTIMAL SOLUBLE FULL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2[^\.].*/ and nozzle_diameter[0]==0.4 and num_extruders>1
 external_perimeter_speed = 25
 notes = Set your soluble extruder in Multiple Extruders > Support material/raft/skirt extruder &  Support material/raft interface extruder
@@ -604,6 +649,7 @@ top_solid_infill_speed = 30
 # MK2 MMU #
 [print:0.15mm OPTIMAL SOLUBLE INTERFACE]
 inherits = 0.15mm OPTIMAL SOLUBLE FULL
+alias = 0.15mm OPTIMAL SOLUBLE INTERFACE
 notes = Set your soluble extruder in Multiple Extruders >  Support material/raft interface extruder
 support_material_extruder = 0
 support_material_interface_layers = 3
@@ -613,6 +659,7 @@ support_material_xy_spacing = 80%
 # MK3 #
 [print:0.15mm QUALITY 0.25 nozzle MK3]
 inherits = *0.15mm*; *0.25nozzleMK3*; *MK3*
+alias = 0.15mm QUALITY
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.25
 fill_pattern = grid
 fill_density = 20%
@@ -620,6 +667,7 @@ fill_density = 20%
 # MK3 #
 [print:0.15mm DETAIL 0.6 nozzle MK3]
 inherits = *0.15mm*; *0.6nozzleMK3*; *MK306*
+alias = 0.15mm DETAIL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.6
 external_perimeter_speed = 35
 infill_acceleration = 1250
@@ -663,6 +711,7 @@ top_solid_infill_speed = 70
 # MK3 #
 [print:0.20mm QUALITY MK3]
 inherits = *0.20mm*; *MK3*
+alias = 0.20mm QUALITY
 bridge_speed = 30
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4
 external_perimeter_speed = 25
@@ -677,6 +726,7 @@ fill_density = 15%
 
 [print:0.20mm SPEED MK3]
 inherits = *0.20mm*; *MK3*
+alias = 0.20mm SPEED
 bridge_speed = 30
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4
 external_perimeter_speed = 35
@@ -690,6 +740,7 @@ top_solid_infill_speed = 50
 # MK3 MMU #
 [print:0.20mm SOLUBLE FULL MK3]
 inherits = 0.20mm SPEED MK3; *soluble_support*
+alias = 0.20mm SOLUBLE FULL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
 notes = Set your soluble extruder in Multiple Extruders > Support material/raft/skirt extruder &  Support material/raft interface extruder
 support_material_extruder = 5
@@ -702,6 +753,7 @@ top_solid_infill_speed = 30
 # MK3 MMU #
 [print:0.20mm SOLUBLE INTERFACE MK3]
 inherits = 0.20mm SOLUBLE FULL MK3
+alias = 0.20mm SOLUBLE INTERFACE
 notes = Set your soluble extruder in Multiple Extruders >  Support material/raft interface extruder
 support_material_extruder = 0
 support_material_interface_layers = 3
@@ -715,6 +767,7 @@ compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and
 # MK2 #
 [print:0.20mm NORMAL 0.6 nozzle]
 inherits = *0.20mm*; *0.6nozzle*
+alias = 0.20mm NORMAL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6
 
 # MK2 MMU #
@@ -739,6 +792,7 @@ support_material_xy_spacing = 80%
 # MK3 #
 [print:0.20mm DETAIL 0.6 nozzle MK3]
 inherits = *0.20mm*; *0.6nozzleMK3*; *MK306*
+alias = 0.20mm DETAIL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.6
 external_perimeter_speed = 35
 infill_acceleration = 1250
@@ -748,6 +802,21 @@ perimeter_speed = 45
 solid_infill_speed = 70
 top_solid_infill_speed = 45
 
+
+# XXXXXXXXXXXXXXXXXXXX
+# XXX--- 0.25mm ---XXX
+# XXXXXXXXXXXXXXXXXXXX
+
+[print:*0.25mm*]
+inherits = *common*
+bottom_solid_layers = 4
+bridge_flow_ratio = 0.95
+external_perimeter_speed = 40
+perimeter_acceleration = 800
+layer_height = 0.25
+perimeter_speed = 50
+top_solid_layers = 4
+
 # XXXXXXXXXXXXXXXXXXXX
 # XXX--- 0.30mm ---XXX
 # XXXXXXXXXXXXXXXXXXXX
@@ -768,6 +837,7 @@ top_solid_layers = 4
 
 [print:0.30mm QUALITY 0.6 nozzle MK3]
 inherits = *0.30mm*; *0.6nozzleMK3*; *MK306*
+alias = 0.30mm QUALITY
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.6
 external_perimeter_speed = 35
 infill_acceleration = 1250
@@ -779,6 +849,7 @@ top_solid_infill_speed = 45
 
 [print:0.30mm SOLUBLE FULL 0.6 nozzle MK3]
 inherits = 0.30mm QUALITY 0.6 nozzle MK3; *soluble_support*
+alias = 0.30mm SOLUBLE FULL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.6 and num_extruders>1
 notes = Set your soluble extruder in Multiple Extruders > Support material/raft/skirt extruder &  Support material/raft interface extruder
 support_material_extruder = 5
@@ -793,6 +864,7 @@ support_material_xy_spacing = 80%
 
 [print:0.30mm SOLUBLE INTERFACE 0.6 nozzle MK3]
 inherits = 0.30mm SOLUBLE FULL 0.6 nozzle MK3
+alias = 0.30mm SOLUBLE INTERFACE
 notes = Set your soluble extruder in Multiple Extruders >  Support material/raft interface extruder
 support_material_extruder = 0
 support_material_interface_layers = 3
@@ -800,6 +872,7 @@ support_material_with_sheath = 0
 
 [print:0.30mm DRAFT MK3]
 inherits = *0.30mm*; *MK3*
+alias = 0.30mm DRAFT
 bottom_solid_layers = 3
 bridge_speed = 30
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.4
@@ -851,15 +924,18 @@ first_layer_extrusion_width = 0.42
 perimeter_extrusion_width = 0.43
 solid_infill_extrusion_width = 0.7
 top_infill_extrusion_width = 0.43
+support_material_extrusion_width = 0.37
 
 # MK2 #
 [print:0.35mm FAST 0.6 nozzle]
 inherits = *0.35mm*; *0.6nozzle*
+alias = 0.35mm FAST
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and nozzle_diameter[0]==0.6
 
 # MK2 MMU #
 [print:0.35mm FAST sol full 0.6 nozzle]
 inherits = *0.35mm*; *0.6nozzle*; *soluble_support*
+alias = 0.35mm FAST SOLUBLE FULL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_model=="MK2SMM" and nozzle_diameter[0]==0.6 and num_extruders>1
 external_perimeter_extrusion_width = 0.6
 external_perimeter_speed = 30
@@ -874,6 +950,7 @@ support_material_extrusion_width = 0.6
 # MK2 MMU #
 [print:0.35mm FAST sol int 0.6 nozzle]
 inherits = 0.35mm FAST sol full 0.6 nozzle
+alias = 0.35mm FAST SOLUBLE INTERFACE
 support_material_extruder = 0
 support_material_interface_layers = 3
 support_material_with_sheath = 0
@@ -882,6 +959,7 @@ support_material_xy_spacing = 150%
 # MK3 #
 [print:0.35mm SPEED 0.6 nozzle MK3]
 inherits = *0.35mm*; *0.6nozzleMK3*; *MK306*
+alias = 0.35mm SPEED
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.6
 external_perimeter_speed = 35
 infill_acceleration = 1250
@@ -917,6 +995,7 @@ top_solid_layers = 4
 # MK3 #
 [print:0.40mm DRAFT 0.6 nozzle MK3]
 inherits = *0.40mm*; *0.6nozzleMK3*; *MK306*
+alias = 0.40mm DRAFT
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and nozzle_diameter[0]==0.6
 external_perimeter_speed = 35
 infill_acceleration = 1250
@@ -943,12 +1022,14 @@ single_extruder_multi_material_priming = 0
 # MK2.5 #
 [print:0.15mm OPTIMAL MK2.5]
 inherits = 0.15mm OPTIMAL
+alias = 0.15mm OPTIMAL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4
 single_extruder_multi_material_priming = 0
 
 # MK2.5 MMU2 #
 [print:0.15mm OPTIMAL SOLUBLE FULL MK2.5]
 inherits = 0.15mm OPTIMAL SOLUBLE FULL
+alias = 0.15mm OPTIMAL SOLUBLE FULL
 support_material_extruder = 5
 support_material_interface_extruder = 5
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
@@ -956,6 +1037,7 @@ compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and
 # MK2.5 MMU2 #
 [print:0.15mm OPTIMAL SOLUBLE INTERFACE MK2.5]
 inherits = 0.15mm OPTIMAL SOLUBLE INTERFACE
+alias = 0.15mm OPTIMAL SOLUBLE INTERFACE
 support_material_extruder = 0
 support_material_interface_extruder = 5
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
@@ -963,18 +1045,21 @@ compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and
 # MK2.5 #
 [print:0.20mm 100mms Linear Advance MK2.5]
 inherits = 0.20mm 100mms Linear Advance
+alias = 0.20mm 100mms Linear Advance
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4
 single_extruder_multi_material_priming = 0
 
 # MK2.5 #
 [print:0.20mm NORMAL MK2.5]
 inherits = 0.20mm NORMAL
+alias = 0.20mm NORMAL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4
 single_extruder_multi_material_priming = 0
 
 # MK2.5 MMU2 #
 [print:0.20mm NORMAL SOLUBLE FULL MK2.5]
 inherits = 0.20mm NORMAL SOLUBLE FULL
+alias = 0.20mm NORMAL SOLUBLE FULL
 support_material_extruder = 5
 support_material_interface_extruder = 5
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
@@ -983,6 +1068,7 @@ single_extruder_multi_material_priming = 0
 # MK2.5 MMU2 #
 [print:0.20mm NORMAL SOLUBLE INTERFACE MK2.5]
 inherits = 0.20mm NORMAL SOLUBLE INTERFACE
+alias = 0.20mm NORMAL SOLUBLE INTERFACE
 support_material_extruder = 0
 support_material_interface_extruder = 5
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4 and num_extruders>1
@@ -991,12 +1077,14 @@ single_extruder_multi_material_priming = 0
 # MK2.5 #
 [print:0.35mm FAST MK2.5]
 inherits = 0.35mm FAST
+alias = 0.35mm FAST
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.5.*/ and nozzle_diameter[0]==0.4
 single_extruder_multi_material_priming = 0
 
 # MK2.5 MMU2 0.6 nozzle#
 [print:0.35mm SOLUBLE FULL 0.6 nozzle MK2.5]
 inherits = *0.35mm*; *0.6nozzle*; *soluble_support*
+alias = 0.35mm SOLUBLE FULL
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK2.*/ and printer_model!="MK2SMM" and nozzle_diameter[0]==0.6 and num_extruders>1
 external_perimeter_extrusion_width = 0.6
 external_perimeter_speed = 30
@@ -1012,11 +1100,154 @@ support_material_extrusion_width = 0.6
 
 [print:0.35mm SOLUBLE INTERFACE 0.6 nozzle MK2.5]
 inherits = 0.35mm SOLUBLE FULL 0.6 nozzle MK2.5
+alias = 0.35mm SOLUBLE INTERFACE
 support_material_extruder = 0
 support_material_interface_layers = 3
 support_material_with_sheath = 0
 support_material_xy_spacing = 80%
 
+## MINI print profiles
+
+# 0.4mm nozzle
+
+[print:0.05mm ULTRADETAIL MINI]
+inherits = *0.05mm*; *MINI*
+alias = 0.05mm ULTRADETAIL
+fill_pattern = gyroid
+fill_density = 15%
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/  and nozzle_diameter[0]==0.4
+top_infill_extrusion_width = 0.4
+small_perimeter_speed = 15
+perimeter_extrusion_width = 0.4
+external_perimeter_extrusion_width = 0.4
+
+[print:0.07mm ULTRADETAIL MINI]
+inherits = *0.07mm*; *MINI*
+alias = 0.07mm ULTRADETAIL
+fill_pattern = gyroid
+fill_density = 15%
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/  and nozzle_diameter[0]==0.4
+top_infill_extrusion_width = 0.4
+small_perimeter_speed = 15
+perimeter_extrusion_width = 0.4
+external_perimeter_extrusion_width = 0.4
+
+[print:0.10mm DETAIL MINI]
+inherits = *0.10mm*; *MINI*
+alias = 0.10mm DETAIL
+bridge_speed = 30
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.4
+perimeter_speed = 40
+external_perimeter_speed = 30
+infill_speed = 80
+solid_infill_speed = 80
+top_infill_extrusion_width = 0.4
+top_solid_infill_speed = 40
+fill_pattern = gyroid
+fill_density = 15%
+perimeters = 3
+bridge_acceleration = 800
+
+[print:0.15mm QUALITY MINI]
+inherits = *0.15mm*; *MINI*
+alias = 0.15mm QUALITY
+bridge_speed = 30
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.4
+perimeter_speed = 40
+external_perimeter_speed = 30
+infill_speed = 80
+solid_infill_speed = 80
+top_solid_infill_speed = 40
+fill_pattern = gyroid
+fill_density = 15%
+bridge_flow_ratio = 0.85
+
+[print:0.15mm SPEED MINI]
+inherits = *0.15mm*; *MINI*
+alias = 0.15mm SPEED
+bridge_speed = 30
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.4
+perimeter_speed = 50
+external_perimeter_speed = 40
+infill_speed = 140
+solid_infill_speed = 140
+top_solid_infill_speed = 40
+bridge_flow_ratio = 0.85
+
+[print:0.20mm QUALITY MINI]
+inherits = *0.20mm*; *MINI*
+alias = 0.20mm QUALITY
+bridge_speed = 30
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.4
+perimeter_speed = 40
+external_perimeter_speed = 30
+infill_speed = 80
+solid_infill_speed = 80
+top_solid_infill_speed = 40
+fill_pattern = gyroid
+fill_density = 15%
+
+[print:0.20mm SPEED MINI]
+inherits = *0.20mm*; *MINI*
+alias = 0.20mm SPEED
+bridge_speed = 30
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.4
+perimeter_speed = 50
+external_perimeter_speed = 40
+infill_speed = 140
+max_print_speed = 150
+solid_infill_speed = 140
+top_solid_infill_speed = 40
+
+[print:0.25mm DRAFT MINI]
+inherits = *0.25mm*; *MINI*
+alias = 0.25mm DRAFT
+bridge_speed = 30
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.4
+external_perimeter_speed = 40
+infill_speed = 90
+perimeter_speed = 50
+small_perimeter_speed = 25
+solid_infill_speed = 85
+top_solid_infill_speed = 45
+first_layer_extrusion_width = 0.42
+infill_extrusion_width = 0.48
+solid_infill_extrusion_width = 0.48
+top_infill_extrusion_width = 0.4
+
+# 0.25mm nozzle
+[print:0.05mm ULTRADETAIL 0.25 nozzle MINI]
+inherits = *0.05mm*; *0.25nozzle*; *MINI*
+alias = 0.05mm ULTRADETAIL
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.25
+fill_pattern = grid
+fill_density = 20%
+
+[print:0.07mm ULTRADETAIL 0.25 nozzle MINI]
+inherits = *0.07mm*; *0.25nozzle*; *MINI*
+alias = 0.07mm ULTRADETAIL
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.25
+infill_speed = 30
+solid_infill_speed = 30
+support_material_speed = 30
+top_solid_infill_speed = 20
+fill_pattern = grid
+fill_density = 20%
+
+[print:0.10mm DETAIL 0.25 nozzle MINI]
+inherits = *0.10mm*; *0.25nozzleMINI*; *MINI*
+alias = 0.10mm DETAIL
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.25
+fill_pattern = grid
+fill_density = 20%
+
+[print:0.15mm QUALITY 0.25 nozzle MINI]
+inherits = *0.15mm*; *0.25nozzleMINI*; *MINI*
+alias = 0.15mm QUALITY
+compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.25
+fill_pattern = grid
+fill_density = 20%
+
 # XXXXXXxxXXXXXXXXXXXXXX
 # XXX--- filament ---XXX
 # XXXXXXXXxxXXXXXXXXXXXX
@@ -1048,7 +1279,7 @@ filament_settings_id = ""
 filament_soluble = 0
 min_print_speed = 15
 slowdown_below_layer_time = 20
-start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif} ; Filament gcode"
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif} ; Filament gcode"
 
 [filament:*PLA*]
 inherits = *common*
@@ -1057,7 +1288,7 @@ bridge_fan_speed = 100
 disable_fan_first_layers = 1
 fan_always_on = 1
 fan_below_layer_time = 100
-filament_colour = #FF3232
+filament_colour = #FF8000
 filament_max_volumetric_speed = 15
 filament_type = PLA
 first_layer_bed_temperature = 60
@@ -1065,7 +1296,7 @@ first_layer_temperature = 215
 max_fan_speed = 100
 min_fan_speed = 100
 temperature = 210
-start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{elsif nozzle_diameter[0]==0.6}18{else}30{endif} ; Filament gcode"
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{elsif nozzle_diameter[0]==0.6}18{else}30{endif} ; Filament gcode"
 
 [filament:*PET*]
 inherits = *common*
@@ -1076,7 +1307,7 @@ fan_always_on = 1
 fan_below_layer_time = 20
 filament_colour = #FF8000
 filament_max_volumetric_speed = 8
-filament_type = PET
+filament_type = PETG
 first_layer_bed_temperature = 85
 first_layer_temperature = 230
 max_fan_speed = 50
@@ -1085,7 +1316,7 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{el
 temperature = 240
 filament_retract_length = 1.4
 filament_retract_lift = 0.2
-compatible_printers_condition = printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
+compatible_printers_condition = printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 
 [filament:*PET06*]
 inherits = *PET*
@@ -1099,6 +1330,49 @@ filament_retract_speed = nil
 filament_retract_lift = 0.2
 compatible_printers_condition = printer_model=="MK2SMM"
 
+[filament:*PETMINI*]
+inherits = *PET*
+filament_retract_length = nil
+filament_retract_speed = 40
+filament_deretract_speed = 25
+filament_retract_lift = nil
+filament_retract_before_travel = 1
+filament_max_volumetric_speed = 7
+compatible_printers_condition = printer_model=="MINI"
+start_filament_gcode = "M900 K0.2 ; Filament gcode"
+
+[filament:*ABSMINI*]
+inherits = *ABS*
+bed_temperature = 100
+filament_retract_length = 2.7
+filament_retract_speed = nil
+filament_deretract_speed = nil
+filament_retract_lift = nil
+filament_retract_before_travel = 3
+filament_wipe = 0
+filament_max_volumetric_speed = 10
+compatible_printers_condition = printer_model=="MINI"
+start_filament_gcode = "M900 K0.2 ; Filament gcode"
+
+[filament:*FLEXMINI*]
+inherits = *FLEX*
+filament_retract_length = 6
+filament_retract_speed = 40
+filament_deretract_speed = 15
+filament_retract_lift = 0
+filament_retract_before_travel = 7
+filament_wipe = 0
+bridge_fan_speed = 70
+fan_always_on = 1
+cooling = 0
+max_fan_speed = 40
+min_fan_speed = 40
+filament_max_volumetric_speed = 1.6
+compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model=="MINI"
+disable_fan_first_layers = 3
+extrusion_multiplier = 1.2
+start_filament_gcode = "M900 K0 ; Filament gcode"
+
 [filament:*ABS*]
 inherits = *common*
 bed_temperature = 110
@@ -1117,13 +1391,14 @@ max_fan_speed = 30
 min_fan_speed = 20
 temperature = 255
 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{elsif nozzle_diameter[0]==0.6}18{else}30{endif} ; Filament gcode"
+compatible_printers_condition = printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 
 [filament:*FLEX*]
 inherits = *common*
 bed_temperature = 50
-bridge_fan_speed = 100
+bridge_fan_speed = 80
 # For now, all but selected filaments are disabled for the MMU 2.0
-compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model!="MK2SMM" and num_extruders==1 && ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and single_extruder_multi_material)
+compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model!="MK2SMM" and printer_model!="MINI" and num_extruders==1 && ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and single_extruder_multi_material)
 cooling = 0
 disable_fan_first_layers = 1
 extrusion_multiplier = 1.2
@@ -1141,27 +1416,46 @@ temperature = 240
 filament_retract_length = 0.4
 filament_retract_lift = 0
 
-[filament:ColorFabb Brass Bronze]
+[filament:ColorFabb bronzeFill]
 inherits = *PLA*
-# For now, all but selected filaments are disabled for the MMU 2.0
+filament_vendor = ColorFabb
 compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 extrusion_multiplier = 1.2
-filament_cost = 56.64
+filament_cost = 72.89
 filament_density = 3.9
 filament_colour = #804040
 filament_max_volumetric_speed = 9
-filament_notes = "List of materials tested with standard print settings:\n\nColorFabb bronzeFill\nColorFabb brassFill\nColorFabb steelFill\nColorFabb copperFill"
+
+[filament:ColorFabb steelFill]
+inherits = *PLA*
 filament_vendor = ColorFabb
+compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
+extrusion_multiplier = 1.2
+filament_cost = 72.89
+filament_density = 3.13
+filament_colour = #808080
+filament_max_volumetric_speed = 8
+
+[filament:ColorFabb copperFill]
+inherits = *PLA*
+filament_vendor = ColorFabb
+compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
+extrusion_multiplier = 1.2
+filament_cost = 72.89
+filament_density = 3.9
+filament_colour = #82603E
+filament_max_volumetric_speed = 9
 
 [filament:ColorFabb HT]
 inherits = *PET*
+filament_vendor = ColorFabb
 bed_temperature = 110
 bridge_fan_speed = 30
 cooling = 1
 disable_fan_first_layers = 3
 fan_always_on = 0
 fan_below_layer_time = 10
-filament_cost = 58.66
+filament_cost = 65.66
 filament_density = 1.18
 first_layer_bed_temperature = 105
 first_layer_temperature = 270
@@ -1169,56 +1463,53 @@ max_fan_speed = 20
 min_fan_speed = 10
 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}45{endif}; Filament gcode"
 temperature = 270
-filament_vendor = ColorFabb
 
 [filament:ColorFabb PLA-PHA]
 inherits = *PLA*
-filament_cost = 55.5
-filament_density = 1.24
 filament_vendor = ColorFabb
+filament_cost = 52.46
+filament_density = 1.24
 
 [filament:ColorFabb woodFill]
 inherits = *PLA*
-# For now, all but selected filaments are disabled for the MMU 2.0
+filament_vendor = ColorFabb
 compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 extrusion_multiplier = 1.2
-filament_cost = 62.9
+filament_cost = 58.30
 filament_density = 1.15
 filament_colour = #dfc287
-filament_max_volumetric_speed = 10
+filament_max_volumetric_speed = 9
 first_layer_temperature = 200
-start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode"
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/}0{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}0{else}10{endif}; Filament gcode"
 temperature = 200
-filament_vendor = ColorFabb
 
 [filament:ColorFabb corkFill]
 inherits = *PLA*
+filament_vendor = ColorFabb
 compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 extrusion_multiplier = 1.2
-filament_cost = 45.45
+filament_cost = 58.30
 filament_density = 1.18
 filament_colour = #634d33
 filament_max_volumetric_speed = 6
 first_layer_temperature = 220
-start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode"
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/}0{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}0{else}10{endif}; Filament gcode"
 temperature = 220
-filament_vendor = ColorFabb
 
 [filament:ColorFabb XT]
 inherits = *PET*
-filament_type = PET
-filament_cost = 62.9
+filament_vendor = ColorFabb
+filament_cost = 58.30
 filament_density = 1.27
 first_layer_bed_temperature = 90
 first_layer_temperature = 260
 temperature = 270
-filament_vendor = ColorFabb
 
 [filament:ColorFabb XT-CF20]
 inherits = *PET*
-compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
+filament_vendor = ColorFabb
 extrusion_multiplier = 1.2
-filament_cost = 80.65
+filament_cost = 72.89
 filament_density = 1.35
 filament_colour = #804040
 filament_max_volumetric_speed = 1
@@ -1228,11 +1519,11 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{el
 temperature = 260
 filament_retract_length = nil
 filament_retract_lift = 0.2
-filament_vendor = ColorFabb
 
 [filament:ColorFabb nGen]
 inherits = *PET*
-filament_cost = 21.2
+filament_vendor = ColorFabb
+filament_cost = 52.46
 filament_density = 1.2
 bridge_fan_speed = 40
 fan_always_on = 0
@@ -1241,11 +1532,11 @@ filament_type = NGEN
 first_layer_temperature = 240
 max_fan_speed = 35
 min_fan_speed = 20
-filament_vendor = ColorFabb
 
 [filament:ColorFabb nGen flex]
 inherits = *FLEX*
-filament_cost = 0
+filament_vendor = ColorFabb
+filament_cost = 58.30
 filament_density = 1
 bed_temperature = 85
 bridge_fan_speed = 40
@@ -1261,35 +1552,42 @@ min_fan_speed = 20
 temperature = 260
 filament_retract_length = nil
 filament_retract_lift = 0
-compatible_printers_condition = nozzle_diameter[0]>0.35 and num_extruders==1 && ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and single_extruder_multi_material)
-filament_vendor = ColorFabb
+compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model!="MINI" and num_extruders==1 && ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK3.*/ and single_extruder_multi_material)
 
 [filament:E3D Edge]
 inherits = *PET*
+filament_vendor = E3D
 filament_cost = 56.9
 filament_density = 1.26
 filament_type = EDGE
-filament_vendor = E3D
+compatible_printers_condition = printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 
 [filament:E3D PC-ABS]
 inherits = *ABS*
+filament_vendor = E3D
 filament_cost = 0
 filament_type = PC
 filament_density = 1.05
 first_layer_temperature = 270
 temperature = 270
-filament_vendor = E3D
+
+[filament:Fillamentum PLA]
+inherits = *PLA*
+filament_vendor = Fillamentum
+filament_cost = 25.4
+filament_density = 1.24
 
 [filament:Fillamentum ABS]
 inherits = *ABS*
+filament_vendor = Fillamentum
 filament_cost = 32.4
 filament_density = 1.04
 first_layer_temperature = 240
 temperature = 240
-filament_vendor = Fillamentum
 
 [filament:Fillamentum ASA]
 inherits = *ABS*
+filament_vendor = Fillamentum
 filament_cost = 38.7
 filament_density = 1.07
 fan_always_on = 1
@@ -1301,10 +1599,10 @@ slowdown_below_layer_time = 15
 first_layer_temperature = 265
 temperature = 265
 filament_type = ASA
-filament_vendor = Fillamentum
 
 [filament:Prusament ASA]
 inherits = *ABS*
+filament_vendor = Prusa Polymers
 filament_cost = 35.28
 filament_density = 1.07
 fan_always_on = 1
@@ -1324,6 +1622,7 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{el
 
 [filament:Fillamentum CPE]
 inherits = *PET*
+filament_vendor = Fillamentum
 filament_cost = 54.1
 filament_density = 1.25
 filament_type = CPE
@@ -1332,11 +1631,10 @@ first_layer_temperature = 275
 max_fan_speed = 50
 min_fan_speed = 50
 temperature = 275
-filament_vendor = Fillamentum
 
 [filament:Fillamentum Timberfill]
 inherits = *PLA*
-# For now, all but selected filaments are disabled for the MMU 2.0
+filament_vendor = Fillamentum
 compatible_printers_condition = nozzle_diameter[0]>0.35 and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 extrusion_multiplier = 1.2
 filament_cost = 68
@@ -1344,33 +1642,33 @@ filament_density = 1.15
 filament_colour = #804040
 filament_max_volumetric_speed = 10
 first_layer_temperature = 190
-start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode"
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/}0{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}0{else}10{endif}; Filament gcode"
 temperature = 190
-filament_vendor = Fillamentum
 
 [filament:Generic ABS]
 inherits = *ABS*
+filament_vendor = Generic
 filament_cost = 27.82
 filament_density = 1.04
 filament_notes = "List of materials tested with standard ABS print settings:\n\nEsun ABS\nFil-A-Gehr ABS\nHatchboxABS\nPlasty Mladec ABS"
-filament_vendor = Generic
 
 [filament:Generic PET]
 inherits = *PET*
+filament_vendor = Generic
 filament_cost = 27.82
 filament_density = 1.27
 filament_notes = "List of manufacturers tested with standard PET print settings:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty Mladec PETG"
-filament_vendor = Generic
 
 [filament:Generic PLA]
 inherits = *PLA*
+filament_vendor = Generic
 filament_cost = 25.4
 filament_density = 1.24
 filament_notes = "List of materials tested with standard PLA print settings:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty Mladec PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nVerbatim BVOH"
-filament_vendor = Generic
 
 [filament:Generic FLEX]
 inherits = *FLEX*
+filament_vendor = Generic
 filament_cost = 82
 filament_density = 1.22
 filament_max_volumetric_speed = 1.2
@@ -1380,6 +1678,7 @@ filament_retract_lift = nil
 
 [filament:Polymaker PC-Max]
 inherits = *ABS*
+filament_vendor = Polymaker
 filament_cost = 77.3
 filament_density = 1.20
 filament_type = PC
@@ -1388,10 +1687,11 @@ filament_colour = #3A80CA
 first_layer_bed_temperature = 100
 first_layer_temperature = 270
 temperature = 270
-filament_vendor = Polymaker
+bridge_fan_speed = 0
 
 [filament:PrimaSelect PVA+]
 inherits = *PLA*
+filament_vendor = PrimaSelect
 filament_cost = 108
 filament_density = 1.23
 cooling = 0
@@ -1403,16 +1703,15 @@ filament_ramming_parameters = "120 100 8.3871 8.6129 8.93548 9.22581 9.48387 9.7
 filament_soluble = 1
 filament_type = PVA
 first_layer_temperature = 195
-start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode"
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/}0{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}0{else}10{endif}; Filament gcode"
 temperature = 195
-filament_vendor = PrimaSelect
 
 [filament:Prusa ABS]
 inherits = *ABS*
+filament_vendor = Prusa
 filament_cost = 27.82
 filament_density = 1.08
 filament_notes = "List of materials tested with standard ABS print settings:\n\nEsun ABS\nFil-A-Gehr ABS\nHatchboxABS\nPlasty Mladec ABS"
-filament_vendor = Prusa
 
 [filament:*ABS MMU2*]
 inherits = Prusa ABS
@@ -1429,10 +1728,13 @@ filament_unloading_speed = 20
 
 [filament:Generic ABS MMU2]
 inherits = *ABS MMU2*
+alias = Generic ABS
 filament_vendor = Generic
 
 [filament:Prusament ASA MMU2]
 inherits = *ABS MMU2*
+alias = Prusament ASA
+filament_vendor = Prusa Polymers
 filament_cost = 35.28
 filament_density = 1.07
 fan_always_on = 1
@@ -1455,10 +1757,12 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{el
 
 [filament:Prusa ABS MMU2]
 inherits = *ABS MMU2*
+alias = Prusa ABS
 filament_vendor = Prusa
 
 [filament:Prusa HIPS]
 inherits = *ABS*
+filament_vendor = Prusa
 filament_cost = 27.3
 filament_density = 1.04
 bridge_fan_speed = 50
@@ -1472,43 +1776,44 @@ filament_type = HIPS
 first_layer_temperature = 220
 max_fan_speed = 20
 min_fan_speed = 20
-start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode"
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/}0{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}0{else}10{endif}; Filament gcode"
 temperature = 220
-filament_vendor = Prusa
 
 [filament:Prusa PET]
 inherits = *PET*
+filament_vendor = Prusa
 filament_cost = 27.82
 filament_density = 1.27
 filament_notes = "List of manufacturers tested with standard PET print settings:\n\nE3D Edge\nPlasty Mladec PETG"
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-filament_vendor = Prusa
+compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 
 [filament:Prusament PETG]
 inherits = *PET*
+filament_vendor = Prusa Polymers
 first_layer_temperature = 240
 temperature = 250
 filament_cost = 24.99
 filament_density = 1.27
 filament_type = PETG
-compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
-filament_vendor = Prusa
+compatible_printers_condition = nozzle_diameter[0]!=0.6 and printer_model!="MK2SMM" and printer_model!="MINI" and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material)
 
 [filament:Prusa PET 0.6 nozzle]
 inherits = *PET06*
+alias = Prusa PET
+filament_vendor = Prusa
 filament_cost = 27.82
 filament_density = 1.27
 filament_notes = "List of manufacturers tested with standard PET print settings:\n\nE3D Edge\nPlasty Mladec PETG"
-filament_vendor = Prusa
 
 [filament:Prusament PETG 0.6 nozzle]
 inherits = *PET06*
+alias = Prusament PETG
+filament_vendor = Prusa Polymers
 first_layer_temperature = 240
 temperature = 250
 filament_cost = 24.99
 filament_density = 1.27
 filament_type = PETG
-filament_vendor = Prusa
 
 [filament:*PET MMU2*]
 inherits = Prusa PET
@@ -1536,42 +1841,50 @@ filament_max_volumetric_speed = 13
 
 [filament:Generic PET MMU2]
 inherits = *PET MMU2*
+alias = Generic PET
 filament_vendor = Generic
 
 [filament:Prusa PET MMU2]
 inherits = *PET MMU2*
+alias = Prusa PET
 filament_vendor = Prusa
 
 [filament:Prusament PETG MMU2]
 inherits = *PET MMU2*
 filament_type = PETG
+alias = Prusament PETG
+filament_vendor = Prusa Polymers
 
 [filament:Generic PET MMU2 0.6 nozzle]
 inherits = *PET MMU2 06*
+alias = Generic PET
+filament_vendor = Generic
 
 [filament:Prusa PET MMU2 0.6 nozzle]
 inherits = *PET MMU2 06*
+alias = Prusa PET
 filament_vendor = Prusa
 
 [filament:Prusament PETG MMU2 0.6 nozzle]
 inherits = *PET MMU2 06*
 filament_type = PETG
-filament_vendor = Prusa
+alias = Prusament PETG
+filament_vendor = Prusa Polymers
 
 [filament:Prusa PLA]
 inherits = *PLA*
+filament_vendor = Prusa
 filament_cost = 25.4
 filament_density = 1.24
-filament_notes = "List of materials tested with standard PLA print settings:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFiberlogy PLA\nFillamentum PLA\nFloreon3D\nHatchbox PLA\nPlasty Mladec PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nVerbatim PLA\nAmazonBasics PLA"
-filament_vendor = Prusa
+filament_notes = "List of materials tested with standard PLA print settings:\n\nDas Filament\nEsun PLA\nEUMAKERS PLA\nFiberlogy HD-PLA\nFiberlogy PLA\nFloreon3D\nHatchbox PLA\nPlasty Mladec PLA\nPrimavalue PLA\nProto pasta Matte Fiber\nAmazonBasics PLA"
 
 [filament:Prusament PLA]
 inherits = *PLA*
+filament_vendor = Prusa Polymers
 temperature = 215
 filament_cost = 24.99
 filament_density = 1.24
 filament_notes = "Affordable filament for everyday printing in premium quality manufactured in-house by Josef Prusa"
-filament_vendor = Prusa
 
 [filament:*PLA MMU2*]
 inherits = Prusa PLA
@@ -1591,25 +1904,29 @@ filament_unloading_speed_start = 100
 
 [filament:Generic PLA MMU2]
 inherits = *PLA MMU2*
+alias = Generic PLA
 filament_vendor = Generic
 
 [filament:Prusa PLA MMU2]
 inherits = *PLA MMU2*
+alias = Prusa PLA
 filament_vendor = Prusa
 
 [filament:Prusament PLA MMU2]
 inherits = *PLA MMU2*
-filament_vendor = Prusa
+alias = Prusament PLA
+filament_vendor = Prusa Polymers
 
 [filament:SemiFlex or Flexfill 98A]
 inherits = *FLEX*
+filament_vendor = Generic
 filament_cost = 82
 filament_density = 1.22
 filament_max_volumetric_speed = 1.35
-filament_vendor = Flexfill
 
 [filament:Taulman Bridge]
 inherits = *common*
+filament_vendor = Taulman
 filament_cost = 40
 filament_density = 1.13
 bed_temperature = 90
@@ -1626,12 +1943,12 @@ first_layer_bed_temperature = 60
 first_layer_temperature = 240
 max_fan_speed = 5
 min_fan_speed = 0
-start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode"
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/}0{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}0{else}10{endif}; Filament gcode"
 temperature = 250
-filament_vendor = Taulman
 
 [filament:Taulman T-Glase]
 inherits = *PET*
+filament_vendor = Taulman
 filament_cost = 40
 filament_density = 1.27
 bridge_fan_speed = 40
@@ -1642,10 +1959,16 @@ first_layer_temperature = 240
 max_fan_speed = 5
 min_fan_speed = 0
 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode"
-filament_vendor = Taulman
+
+[filament:Verbatim PLA]
+inherits = *PLA*
+filament_vendor = Verbatim
+filament_cost = 42.99
+filament_density = 1.24
 
 [filament:Verbatim BVOH]
 inherits = *common*
+filament_vendor = Verbatim
 filament_cost = 218
 filament_density = 1.23
 bed_temperature = 60
@@ -1664,12 +1987,13 @@ first_layer_bed_temperature = 60
 first_layer_temperature = 215
 max_fan_speed = 100
 min_fan_speed = 100
-start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode"
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/}0{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}0{else}10{endif}; Filament gcode"
 temperature = 210
-filament_vendor = Verbatim
 
 [filament:Verbatim BVOH MMU2]
 inherits = Verbatim BVOH
+alias = Verbatim BVOH
+filament_vendor = Verbatim
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material
 temperature = 195
 fan_always_on = 1
@@ -1686,10 +2010,11 @@ filament_unload_time = 12
 filament_unloading_speed = 20
 filament_unloading_speed_start = 100
 filament_loading_speed_start = 19
-filament_vendor = Verbatim
 
 [filament:PrimaSelect PVA+ MMU2]
 inherits = *common*
+alias = PrimaSelect PVA+
+filament_vendor = PrimaSelect
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_MK(2.5|3).*/ and single_extruder_multi_material
 bed_temperature = 60
 bridge_fan_speed = 100
@@ -1725,10 +2050,10 @@ min_print_speed = 15
 slowdown_below_layer_time = 20
 start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}30{endif}; Filament gcode"
 temperature = 195
-filament_vendor = PrimaSelect
 
 [filament:Verbatim PP]
 inherits = *common*
+filament_vendor = Verbatim
 filament_cost = 72
 filament_density = 0.89
 bed_temperature = 100
@@ -1746,14 +2071,15 @@ first_layer_bed_temperature = 100
 first_layer_temperature = 220
 max_fan_speed = 100
 min_fan_speed = 100
-start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{else}10{endif}; Filament gcode"
+start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/}0{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}0{else}10{endif}; Filament gcode"
 temperature = 220
-filament_vendor = Verbatim
 
 ## Filaments MMU1
 
 [filament:ColorFabb HT MMU1]
 inherits = *PETMMU1*
+alias = ColorFabb HT
+filament_vendor = ColorFabb
 bed_temperature = 110
 bridge_fan_speed = 30
 cooling = 1
@@ -1771,7 +2097,9 @@ temperature = 270
 
 [filament:ColorFabb XT MMU1]
 inherits = *PETMMU1*
-filament_type = PET
+alias = ColorFabb XT
+filament_vendor = ColorFabb
+filament_type = PETG
 filament_cost = 62.9
 filament_density = 1.27
 first_layer_bed_temperature = 90
@@ -1780,6 +2108,8 @@ temperature = 270
 
 [filament:ColorFabb XT-CF20 MMU1]
 inherits = *PETMMU1*
+alias = ColorFabb XT-CF20
+filament_vendor = ColorFabb
 compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model=="MK2SMM"
 extrusion_multiplier = 1.2
 filament_cost = 80.65
@@ -1793,6 +2123,8 @@ temperature = 260
 
 [filament:ColorFabb nGen MMU1]
 inherits = *PETMMU1*
+alias = ColorFabb nGen
+filament_vendor = ColorFabb
 filament_cost = 21.2
 filament_density = 1.2
 bridge_fan_speed = 40
@@ -1805,6 +2137,8 @@ min_fan_speed = 20
 
 [filament:E3D Edge MMU1]
 inherits = *PETMMU1*
+alias = E3D Edge
+filament_vendor = E3D
 filament_cost = 56.9
 filament_density = 1.26
 filament_type = EDGE
@@ -1812,6 +2146,8 @@ filament_notes = "List of manufacturers tested with standard PET print settings:
 
 [filament:Fillamentum CPE MMU1]
 inherits = *PETMMU1*
+alias = Fillamentum CPE
+filament_vendor = Fillamentum
 filament_cost = 54.1
 filament_density = 1.25
 filament_type = CPE
@@ -1823,18 +2159,24 @@ temperature = 275
 
 [filament:Generic PET MMU1]
 inherits = *PETMMU1*
+alias = Generic PET
+filament_vendor = Generic
 filament_cost = 27.82
 filament_density = 1.27
 filament_notes = "List of manufacturers tested with standard PET print settings:\n\nE3D Edge\nFillamentum CPE GH100\nPlasty Mladec PETG"
 
 [filament:Prusa PET MMU1]
 inherits = *PETMMU1*
+alias = Prusa PET
+filament_vendor = Prusa
 filament_cost = 27.82
 filament_density = 1.27
 filament_notes = "List of manufacturers tested with standard PET print settings:\n\nE3D Edge\nPlasty Mladec PETG"
 
 [filament:Prusament PETG MMU1]
 inherits = *PETMMU1*
+alias = Prusament PETG
+filament_vendor = Prusa Polymers
 first_layer_temperature = 240
 temperature = 250
 filament_cost = 24.99
@@ -1843,6 +2185,8 @@ filament_type = PETG
 
 [filament:Taulman T-Glase MMU1]
 inherits = *PETMMU1*
+alias = Taulman T-Glase
+filament_vendor = Taulman
 filament_cost = 40
 filament_density = 1.27
 bridge_fan_speed = 40
@@ -1856,6 +2200,8 @@ start_filament_gcode = "M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{el
 
 [filament:SemiFlex or Flexfill 98A MMU1]
 inherits = *FLEX*
+alias = SemiFlex or Flexfill 98A
+filament_vendor = Generic
 filament_cost = 82
 filament_density = 1.22
 filament_max_volumetric_speed = 1.35
@@ -1866,6 +2212,8 @@ compatible_printers_condition = printer_model=="MK2SMM"
 
 [filament:Generic FLEX MMU1]
 inherits = *FLEX*
+alias = Generic FLEX
+filament_vendor = Generic
 filament_cost = 82
 filament_density = 1.22
 filament_max_volumetric_speed = 1.2
@@ -1874,6 +2222,195 @@ filament_retract_speed = nil
 filament_retract_lift = nil
 compatible_printers_condition = printer_model=="MK2SMM"
 
+## Filaments MINI
+
+[filament:Generic PET MINI]
+inherits = Generic PET; *PETMINI*
+alias = Generic PET
+
+[filament:Generic ABS MINI]
+inherits = Generic ABS; *ABSMINI*
+alias = Generic ABS
+
+[filament:Prusament PETG MINI]
+inherits = Prusament PETG; *PETMINI*
+alias = Prusament PETG
+
+[filament:Prusament ASA MINI]
+inherits = Prusament ASA; *ABSMINI*
+alias = Prusament ASA
+first_layer_temperature = 260
+first_layer_bed_temperature = 100
+temperature = 260
+bed_temperature = 100
+fan_always_on = 1
+cooling = 1
+min_fan_speed = 20
+max_fan_speed = 20
+min_print_speed = 15
+slowdown_below_layer_time = 15
+disable_fan_first_layers = 4
+filament_type = ASA
+filament_colour = #FFF2EC
+
+[filament:Fillamentum Flexfill 98A MINI]
+inherits = SemiFlex or Flexfill 98A; *FLEXMINI*
+alias = Fillamentum Flexfill 98A
+filament_vendor = Fillamentum
+filament_max_volumetric_speed = 1.6
+
+[filament:Fillamentum CPE MINI]
+inherits = Fillamentum CPE; *PETMINI*
+alias = Fillamentum CPE
+first_layer_temperature = 265
+first_layer_bed_temperature = 90
+temperature = 265
+
+[filament:ColorFabb nGen MINI]
+inherits = ColorFabb nGen; *PETMINI*
+alias = ColorFabb nGen
+
+[filament:ColorFabb nGen flex MINI]
+inherits = ColorFabb nGen flex; *FLEXMINI*
+alias = ColorFabb nGen flex
+filament_max_volumetric_speed = 4
+
+[filament:E3D PC-ABS MINI]
+inherits = E3D PC-ABS; *ABSMINI*
+alias = E3D PC-ABS
+
+[filament:Fillamentum ABS MINI]
+inherits = Fillamentum ABS; *ABSMINI*
+alias = Fillamentum ABS
+
+[filament:Fillamentum ASA MINI]
+inherits = Fillamentum ASA; *ABSMINI*
+alias = Fillamentum ASA
+first_layer_temperature = 255
+first_layer_bed_temperature = 100
+temperature = 255
+bed_temperature = 100
+fan_always_on = 1
+cooling = 1
+min_fan_speed = 20
+max_fan_speed = 20
+min_print_speed = 15
+slowdown_below_layer_time = 15
+disable_fan_first_layers = 4
+filament_type = ASA
+filament_colour = #FFF2EC
+
+[filament:Polymaker PC-Max MINI]
+inherits = Polymaker PC-Max; *ABSMINI*
+alias = Polymaker PC-Max
+filament_type = PC
+bed_temperature = 100
+filament_colour = #3A80CA
+first_layer_bed_temperature = 100
+first_layer_temperature = 270
+temperature = 270
+bridge_fan_speed = 0
+
+[filament:Prusa ABS MINI]
+inherits = *ABSMINI*
+alias = Prusa ABS
+filament_vendor = Prusa
+
+[filament:Generic HIPS MINI]
+inherits = *ABSMINI*
+alias = Generic HIPS
+filament_vendor = Generic
+filament_cost = 27.3
+filament_density = 1.04
+bridge_fan_speed = 50
+cooling = 1
+extrusion_multiplier = 0.9
+fan_always_on = 1
+fan_below_layer_time = 10
+filament_colour = #FFFFD7
+filament_soluble = 1
+filament_type = HIPS
+first_layer_temperature = 230
+max_fan_speed = 20
+min_fan_speed = 20
+start_filament_gcode = "M900 K0.2 ; Filament gcode"
+temperature = 230
+
+[filament:ColorFabb HT MINI]
+inherits = *PETMINI*
+alias = ColorFabb HT
+filament_vendor = ColorFabb
+bed_temperature = 100
+bridge_fan_speed = 30
+cooling = 1
+disable_fan_first_layers = 3
+fan_always_on = 0
+fan_below_layer_time = 10
+filament_cost = 58.66
+filament_density = 1.18
+first_layer_bed_temperature = 100
+first_layer_temperature = 270
+max_fan_speed = 20
+min_fan_speed = 10
+start_filament_gcode = "M900 K0.2 ; Filament gcode"
+temperature = 270
+
+[filament:ColorFabb XT MINI]
+inherits = *PETMINI*
+alias = ColorFabb XT
+filament_vendor = ColorFabb
+filament_type = PETG
+filament_cost = 62.9
+filament_density = 1.27
+first_layer_bed_temperature = 90
+first_layer_temperature = 260
+temperature = 270
+
+[filament:ColorFabb XT-CF20 MINI]
+inherits = *PETMINI*
+alias = ColorFabb XT-CF20
+filament_vendor = ColorFabb
+compatible_printers_condition = nozzle_diameter[0]>0.35 and printer_model=="MINI"
+extrusion_multiplier = 1.2
+filament_cost = 80.65
+filament_density = 1.35
+filament_colour = #804040
+filament_max_volumetric_speed = 1
+first_layer_bed_temperature = 90
+first_layer_temperature = 260
+start_filament_gcode = "M900 K0.2 ; Filament gcode"
+temperature = 260
+
+[filament:Taulman T-Glase MINI]
+inherits = *PETMINI*
+alias = Taulman T-Glase
+filament_vendor = Taulman
+filament_cost = 40
+filament_density = 1.27
+bridge_fan_speed = 40
+cooling = 0
+fan_always_on = 0
+first_layer_bed_temperature = 90
+first_layer_temperature = 240
+max_fan_speed = 5
+min_fan_speed = 0
+start_filament_gcode = "M900 K0.2 ; Filament gcode"
+
+[filament:E3D Edge MINI]
+inherits = *PETMINI*
+alias = E3D Edge
+filament_vendor = E3D
+filament_cost = 56.9
+filament_density = 1.26
+filament_type = EDGE
+
+[filament:Prusa PET MINI]
+inherits = *PETMINI*
+alias = Prusa PET
+filament_vendor = Prusa
+filament_cost = 27.82
+filament_density = 1.27
+
 [sla_print:*common*]
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_SL1.*/
 layer_height = 0.05
@@ -1921,7 +2458,7 @@ support_head_front_diameter = 0.5
 support_head_penetration = 0.5
 support_pillar_diameter = 1.3
 
-########### Materials 0.025
+########### Materials
 
 [sla_material:*common 0.05*]
 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and printer_notes=~/.*PRINTER_MODEL_SL1.*/
@@ -1955,209 +2492,421 @@ initial_layer_height = 0.1
 
 ########### Materials 0.025
 
+[sla_material:3DM-ABS 0.025]
+inherits = *common 0.025*
+exposure_time = 12
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = 3DM
+
+[sla_material:3DM-Vulcan Gold 0.025]
+inherits = *common 0.025*
+exposure_time = 12
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = 3DM
+
 [sla_material:BlueCast Phrozen Wax 0.025]
 inherits = *common 0.025*
 exposure_time = 15
 initial_exposure_time = 50
+material_type = Tough
+material_vendor = BlueCast
 
 [sla_material:BlueCast EcoGray 0.025]
 inherits = *common 0.025*
 exposure_time = 6
 initial_exposure_time = 40
+material_type = Tough
+material_vendor = BlueCast
 
-[sla_material:BlueCast Keramaster Dental 0.025]
-material_type = Dental
+[sla_material:BlueCast Kera Master Dental 0.025]
 inherits = *common 0.025*
 exposure_time = 6
 initial_exposure_time = 45
-material_vendor = Bluecast
+material_type = Dental
+material_vendor = BlueCast
 
 [sla_material:BlueCast X10 0.025]
 inherits = *common 0.025*
 exposure_time = 4
 initial_exposure_time = 100
+material_type = Tough
+material_vendor = BlueCast
 
+[sla_material:Esun Bio-Photopolymer Resin White 0.025]
+inherits = *common 0.025*
+exposure_time = 5
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Esun
+
+[sla_material:Esun Standard Resin Black 0.025]
+inherits = *common 0.025*
+exposure_time = 6
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Esun
+
+[sla_material:Photocentric Ash Grey 0.025]
+inherits = *common 0.025*
+exposure_time = 9
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Photocentric
+
+[sla_material:Resinworks 3D Violet 0.025]
+inherits = *common 0.025*
+exposure_time = 15
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Resinworks 3D
+
+[sla_material:Resinworks 3D Green 0.025]
+inherits = *common 0.025*
+exposure_time = 17
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Resinworks 3D
+  
+## Prusa
 [sla_material:Prusa Orange Tough 0.025]
 inherits = *common 0.025*
 exposure_time = 6
 initial_exposure_time = 35
+material_type = Tough
 material_vendor = Prusa
 
 [sla_material:Prusa Grey Tough 0.025]
 inherits = *common 0.025*
 exposure_time = 7
 initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Azure Blue Tough 0.025]
 inherits = *common 0.025*
 exposure_time = 7
 initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
+
 
 [sla_material:Prusa Maroon Tough 0.025]
 inherits = *common 0.025*
 exposure_time = 6
 initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Beige Tough 0.025]
 inherits = *common 0.025*
 exposure_time = 6
 initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Pink Tough 0.025]
 inherits = *common 0.025*
 exposure_time = 7
 initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa White Tough 0.025]
 inherits = *common 0.025*
 exposure_time = 6.5
 initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Transparent Tough 0.025]
 inherits = *common 0.025*
 exposure_time = 6
 initial_exposure_time = 15
+material_type = Tough
+material_vendor = Prusa
 
-[sla_material:Prusa Green Casting 0.025]
+[sla_material:Prusa Green Dental Casting 0.025]
 inherits = *common 0.025*
 exposure_time = 12
-initial_exposure_time = 35
+initial_exposure_time = 40
+material_type = Casting
+material_vendor = Prusa
 
-## [sla_material:Prusa Transparent Green Tough 0.025]
+[sla_material:Prusa Transparent Green Tough 0.025]
+inherits = *common 0.025*
+exposure_time = 5
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
+
+[sla_material:Prusa Clear ABS like 0.025]
+inherits = *common 0.025*
+exposure_time = 6
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Prusa
+
+## [sla_material:Prusa ABS like White 0.025]
 ## inherits = *common 0.025*
-## exposure_time = 5
-## initial_exposure_time = 35
+## exposure_time = 6
+## initial_exposure_time = 30
+
+[sla_material:Prusa Grey High Tenacity 0.025]
+inherits = *common 0.025*
+exposure_time = 5
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Prusa
+
+[sla_material:Prusa Cyan Super Low Odor 0.025]
+inherits = *common 0.025*
+exposure_time = 5
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
+
+[sla_material:Prusa Magenta Super Low Odor 0.025]
+inherits = *common 0.025*
+exposure_time = 5
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
+
+[sla_material:Prusa Yellow Super Low Odor 0.025]
+inherits = *common 0.025*
+exposure_time = 5
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
+
+[sla_material:Prusa Orange-Yellow Teeth Model 0.025]
+inherits = *common 0.025*
+exposure_time = 5
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Prusa
+
 
 ########### Materials 0.05
 
+[sla_material:Asiga Denta Model 0.05]
+inherits = *common 0.05*
+exposure_time = 15
+initial_exposure_time = 30
+material_type = Dental
+material_vendor = Asiga
+
+[sla_material:Ameralabs AMD 3 LED 0.05]
+inherits = *common 0.05*
+exposure_time = 5
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Ameralabs
+
 [sla_material:BlueCast EcoGray 0.05]
 inherits = *common 0.05*
 exposure_time = 7
 initial_exposure_time = 35
-material_vendor = Bluecast
+material_type = Tough
+material_vendor = BlueCast
 
-[sla_material:BlueCast Keramaster 0.05]
-inherits = *common 0.05*
-exposure_time = 8
-initial_exposure_time = 45
-material_vendor = Bluecast
-
-[sla_material:BlueCast Keramaster Dental 0.05]
-material_type = Dental
+[sla_material:BlueCast Kera Master Dental 0.05]
 inherits = *common 0.05*
 exposure_time = 7
 initial_exposure_time = 50
-material_vendor = Bluecast
+material_type = Dental
+material_vendor = BlueCast
 
 [sla_material:BlueCast LCD-DLP Original 0.05]
 inherits = *common 0.05*
 exposure_time = 10
 initial_exposure_time = 60
-material_vendor = Bluecast
+material_type = Tough
+material_vendor = BlueCast
 
 [sla_material:BlueCast Phrozen Wax 0.05]
 inherits = *common 0.05*
 exposure_time = 16
 initial_exposure_time = 50
-material_vendor = Bluecast
+material_type = Tough
+material_vendor = BlueCast
 
 [sla_material:BlueCast S+ 0.05]
 inherits = *common 0.05*
 exposure_time = 9
 initial_exposure_time = 45
-material_vendor = Bluecast
+material_type = Tough
+material_vendor = BlueCast
+
+[sla_material:BlueCast X5 0.05]
+inherits = *common 0.05*
+exposure_time = 9
+initial_exposure_time = 100
+material_type = Tough
+material_vendor = BlueCast
 
 [sla_material:BlueCast X10 0.05]
 inherits = *common 0.05*
 exposure_time = 6
 initial_exposure_time = 100
+material_type = Tough
+material_vendor = BlueCast
+
+[sla_material:BlueCast 23LS 0.05]
+inherits = *common 0.05*
+exposure_time = 8
+initial_exposure_time = 50
+material_type = Tough
+material_vendor = BlueCast
 
 [sla_material:Monocure 3D Black Rapid Resin 0.05]
 inherits = *common 0.05*
 exposure_time = 6
 initial_exposure_time = 40
+material_type = Tough
 material_vendor = Monocure
 
 [sla_material:Monocure 3D Blue Rapid Resin 0.05]
 inherits = *common 0.05*
 exposure_time = 7
 initial_exposure_time = 40
+material_type = Tough
 material_vendor = Monocure
 
 [sla_material:Monocure 3D Clear Rapid Resin 0.05]
 inherits = *common 0.05*
 exposure_time = 8
 initial_exposure_time = 40
+material_type = Tough
 material_vendor = Monocure
 
 [sla_material:Monocure 3D Grey Rapid Resin 0.05]
 inherits = *common 0.05*
 exposure_time = 10
 initial_exposure_time = 30
+material_type = Tough
 material_vendor = Monocure
 
 [sla_material:Monocure 3D White Rapid Resin 0.05]
 inherits = *common 0.05*
 exposure_time = 7
 initial_exposure_time = 40
+material_type = Tough
 material_vendor = Monocure
 
 [sla_material:3DM-HTR140 (high temperature) 0.05]
 inherits = *common 0.05*
 exposure_time = 12
 initial_exposure_time = 45
+material_type = Tough
+material_vendor = Monocure
+
+[sla_material:Esun Bio-Photopolymer Resin White 0.05]
+inherits = *common 0.05*
+exposure_time = 8
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Esun
+
+[sla_material:Esun Standard Resin Black 0.05]
+inherits = *common 0.05*
+exposure_time = 7
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Esun
 
 [sla_material:3DM-ABS 0.05]
 inherits = *common 0.05*
 exposure_time = 13
 initial_exposure_time = 25
+material_type = Tough
+material_vendor = 3DM
 
 [sla_material:3DM-BLACK 0.05]
 inherits = *common 0.05*
 exposure_time = 20
 initial_exposure_time = 40
+material_type = Tough
 material_vendor = 3DM
 
 [sla_material:3DM-DENT 0.05]
 inherits = *common 0.05*
 exposure_time = 7
 initial_exposure_time = 45
+material_type = Dental
 material_vendor = 3DM
 
 [sla_material:3DM-HR Green 0.05]
 inherits = *common 0.05*
 exposure_time = 15
 initial_exposure_time = 40
+material_type = Tough
 material_vendor = 3DM
 
 [sla_material:3DM-HR Red Wine 0.05]
 inherits = *common 0.05*
 exposure_time = 9
 initial_exposure_time = 35
+material_type = Tough
 material_vendor = 3DM
 
 [sla_material:3DM-XPRO White 0.05]
 inherits = *common 0.05*
 exposure_time = 9
 initial_exposure_time = 35
+material_type = Tough
+material_vendor = 3DM
+
+[sla_material:3DM-Vulcan Gold 0.05]
+inherits = *common 0.05*
+exposure_time = 15
+initial_exposure_time = 30
+material_type = Tough
 material_vendor = 3DM
 
 [sla_material:FTD Ash Grey 0.05]
 inherits = *common 0.05*
 exposure_time = 9
 initial_exposure_time = 40
+material_type = Tough
 material_vendor = FTD
 
 [sla_material:Harz Labs Model Resin Cherry 0.05]
 inherits = *common 0.05*
 exposure_time = 8
 initial_exposure_time = 45
+material_type = Tough
 material_vendor = Harz Labs
 
+[sla_material:Resinworks 3D Violet 0.05]
+inherits = *common 0.05*
+exposure_time = 17
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Resinworks 3D
+
+[sla_material:Resinworks 3D Green 0.05]
+inherits = *common 0.05*
+exposure_time = 21
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Resinworks 3D
+
 [sla_material:Photocentric Hard Grey 0.05]
 inherits = *common 0.05*
 exposure_time = 15
 initial_exposure_time = 30
+material_type = Tough
+material_vendor = Photocentric
+
+[sla_material:Photocentric Ash Grey 0.05]
+inherits = *common 0.05*
+exposure_time = 10
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Photocentric
 
 ## Prusa
 
@@ -2165,46 +2914,91 @@ initial_exposure_time = 30
 inherits = *common 0.05*
 exposure_time = 7
 initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Orange Tough 0.05]
 inherits = *common 0.05*
 exposure_time = 7.5
 initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Grey Tough 0.05]
 inherits = *common 0.05*
 exposure_time = 8.5
 initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Black Tough 0.05]
 inherits = *common 0.05*
 exposure_time = 6
 initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 ## [sla_material:Prusa Beige Super Low Odor 0.05]
 ## inherits = *common 0.05*
 ## exposure_time = 7.5
 ## initial_exposure_time = 35
+## material_type = Tough
+## material_vendor = Prusa
 
 ## [sla_material:Prusa White Super Low Odor 0.05]
 ## inherits = *common 0.05*
 ## exposure_time = 6.5
 ## initial_exposure_time = 35
+## material_type = Tough
+## material_vendor = Prusa
 
 ## [sla_material:Prusa Grey Super Low Odor 0.05]
 ## inherits = *common 0.05*
 ## exposure_time = 6.5
 ## initial_exposure_time = 35
+## material_type = Tough
+## material_vendor = Prusa
+
+[sla_material:Prusa Cyan Super Low Odor 0.05]
+inherits = *common 0.05*
+exposure_time = 6
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
+
+[sla_material:Prusa Magenta Super Low Odor 0.05]
+inherits = *common 0.05*
+exposure_time = 6
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
+
+[sla_material:Prusa Yellow Super Low Odor 0.05]
+inherits = *common 0.05*
+exposure_time = 6
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 ## [sla_material:Prusa Black High Tenacity 0.05]
 ## inherits = *common 0.05*
 ## exposure_time = 7
 ## initial_exposure_time = 35
+## material_type = Tough
+## material_vendor = Prusa
 
-[sla_material:Prusa Green Casting 0.05]
+[sla_material:Prusa Orange-Yellow Teeth Model 0.05]
+inherits = *common 0.05*
+exposure_time = 7
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Prusa
+
+[sla_material:Prusa Green Dental Casting 0.05]
 inherits = *common 0.05*
 exposure_time = 13
-initial_exposure_time = 40
+initial_exposure_time = 50
+material_type = Casting
 material_vendor = Prusa
 
 ## [sla_material:Prusa Yellow Solid 0.05]
@@ -2216,61 +3010,74 @@ material_vendor = Prusa
 inherits = *common 0.05*
 exposure_time = 7.5
 initial_exposure_time = 35
+material_type = Tough
 material_vendor = Prusa
 
-## [sla_material:Prusa Transparent Green Tough 0.05]
-## inherits = *common 0.05*
-## exposure_time = 6
-## initial_exposure_time = 35
+[sla_material:Prusa Transparent Green Tough 0.05]
+inherits = *common 0.05*
+exposure_time = 6
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Transparent Red Tough 0.05]
 inherits = *common 0.05*
 exposure_time = 6
 initial_exposure_time = 35
+material_type = Tough
 material_vendor = Prusa
 
 [sla_material:Prusa Maroon Tough 0.05]
 inherits = *common 0.05*
 exposure_time = 7.5
 initial_exposure_time = 35
+material_type = Tough
 material_vendor = Prusa
 
 [sla_material:Prusa Pink Tough 0.05]
 inherits = *common 0.05*
 exposure_time = 8
 initial_exposure_time = 35
+material_type = Tough
 material_vendor = Prusa
 
 [sla_material:Prusa Azure Blue Tough 0.05]
 inherits = *common 0.05*
 exposure_time = 8
 initial_exposure_time = 35
+material_type = Tough
 material_vendor = Prusa
 
 [sla_material:Prusa Transparent Tough 0.05]
 inherits = *common 0.05*
 exposure_time = 7
 initial_exposure_time = 15
+material_type = Tough
+material_vendor = Prusa
 
 ## [sla_material:Prusa Yellow Flexible 0.05]
 ## inherits = *common 0.05*
 ## exposure_time = 9
 ## initial_exposure_time = 35
 
-## [sla_material:Prusa Clear Flexible 0.05]
-## inherits = *common 0.05*
-## exposure_time = 5
-## initial_exposure_time = 15
+[sla_material:Prusa Clear Flexible 0.05]
+inherits = *common 0.05*
+exposure_time = 5
+initial_exposure_time = 15
+material_type = Flexible
+material_vendor = Prusa
 
 ## [sla_material:Prusa White Flexible 0.05]
 ## inherits = *common 0.05*
 ## exposure_time = 9
 ## initial_exposure_time = 35
 
-## [sla_material:Prusa Blue Flexible 0.05]
-## inherits = *common 0.05*
-## exposure_time = 9
-## initial_exposure_time = 35
+[sla_material:Prusa Blue Flexible 0.05]
+inherits = *common 0.05*
+exposure_time = 5
+initial_exposure_time = 15
+material_type = Flexible
+material_vendor = Prusa
 
 ## [sla_material:Prusa Black Flexible 0.05]
 ## inherits = *common 0.05*
@@ -2282,61 +3089,128 @@ initial_exposure_time = 15
 ## exposure_time = 9
 ## initial_exposure_time = 35
 
+[sla_material:Prusa Clear ABS like 0.05]
+inherits = *common 0.05*
+exposure_time = 8
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Prusa
+
+## [sla_material:Prusa ABS like White 0.05]
+## inherits = *common 0.05*
+## exposure_time = 8
+## initial_exposure_time = 30
+
+[sla_material:Prusa Yellow Jewelry Casting 0.05]
+inherits = *common 0.05*
+exposure_time = 13
+initial_exposure_time = 45
+material_type = Casting
+material_vendor = Prusa
+
+[sla_material:Prusa Grey High Tenacity 0.05]
+inherits = *common 0.05*
+exposure_time = 7
+initial_exposure_time = 30
+material_type = Tough
+material_vendor = Prusa
+
 ########### Materials 0.035
 
 [sla_material:Prusa Orange Tough 0.035]
 inherits = *common 0.035*
 exposure_time = 6
 initial_exposure_time = 35
+material_type = Tough
 material_vendor = Prusa
 
 ########### Materials 0.1
 
+[sla_material:BlueCast EcoGray 0.1]
+inherits = *common 0.1*
+exposure_time = 10
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = BlueCast
+
+[sla_material:BlueCast Kera Master Dental 0.1]
+inherits = *common 0.1*
+exposure_time = 13
+initial_exposure_time = 50
+material_type = Tough
+material_vendor = BlueCast
+
+## Prusa
+
 [sla_material:Prusa Orange Tough 0.1]
 inherits = *common 0.1*
 exposure_time = 13
 initial_exposure_time = 45
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Beige Tough 0.1]
 inherits = *common 0.1*
 exposure_time = 13
 initial_exposure_time = 45
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Pink Tough 0.1]
 inherits = *common 0.1*
 exposure_time = 13
 initial_exposure_time = 45
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Azure Blue Tough 0.1]
 inherits = *common 0.1*
 exposure_time = 13
 initial_exposure_time = 45
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Maroon Tough 0.1]
 inherits = *common 0.1*
 exposure_time = 13
 initial_exposure_time = 45
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa White Tough 0.1]
 inherits = *common 0.1*
 exposure_time = 13
 initial_exposure_time = 45
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Black Tough 0.1]
 inherits = *common 0.1*
 exposure_time = 13
 initial_exposure_time = 55
+material_type = Tough
+material_vendor = Prusa
 
 [sla_material:Prusa Transparent Tough 0.1]
 inherits = *common 0.1*
 exposure_time = 8
 initial_exposure_time = 35
+material_type = Tough
 material_vendor = Prusa
 
-[sla_material:Prusa Green Casting 0.1]
+[sla_material:Prusa Green Dental Casting 0.1]
 inherits = *common 0.1*
 exposure_time = 15
 initial_exposure_time = 50
+material_type = Casting
+material_vendor = Prusa
+
+[sla_material:Prusa Transparent Green Tough 0.1]
+inherits = *common 0.1*
+exposure_time = 7
+initial_exposure_time = 35
+material_type = Tough
+material_vendor = Prusa
 
 [printer:*common*]
 printer_technology = FFF
@@ -2454,6 +3328,7 @@ retract_length = 1
 retract_speed = 50
 variable_layer_height = 1
 printer_variant = 0.25
+retract_lift = 0.15
 default_print_profile = 0.10mm DETAIL 0.25 nozzle
 
 [printer:Original Prusa i3 MK2S 0.6 nozzle]
@@ -2503,19 +3378,19 @@ min_layer_height = 0.1
 inherits = Original Prusa i3 MK2S
 printer_model = MK2.5
 remaining_times = 1
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
 
 [printer:Original Prusa i3 MK2.5 0.25 nozzle]
 inherits = Original Prusa i3 MK2S 0.25 nozzle
 printer_model = MK2.5
 remaining_times = 1
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
 
 [printer:Original Prusa i3 MK2.5 0.6 nozzle]
 inherits = Original Prusa i3 MK2S 0.6 nozzle
 printer_model = MK2.5
 remaining_times = 1
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
 
 [printer:Original Prusa i3 MK2.5 MMU2 Single]
 inherits = Original Prusa i3 MK2.5; *mm2*
@@ -2544,7 +3419,7 @@ machine_min_travel_rate = 0
 default_print_profile = 0.15mm OPTIMAL MK2.5
 default_filament_profile = Prusament PLA
 printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK2.5\n
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\n; select extruder\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; load to nozzle\nTc\n; purge line\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\n; select extruder\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; load to nozzle\nTc\n; purge line\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n
 end_gcode = G1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors
 
 [printer:Original Prusa i3 MK2.5 MMU2 Single 0.6 nozzle]
@@ -2586,23 +3461,23 @@ single_extruder_multi_material = 1
 # to be defined explicitely.
 nozzle_diameter = 0.4,0.4,0.4,0.4,0.4
 extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\nG92 E0.0\n
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\nG92 E0.0\n
 end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors\n
 
 [printer:Original Prusa i3 MK2.5S]
 inherits = Original Prusa i3 MK2.5
 printer_model = MK2.5S
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83  ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83  ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
 
 [printer:Original Prusa i3 MK2.5S 0.25 nozzle]
 inherits = Original Prusa i3 MK2.5 0.25 nozzle
 printer_model = MK2.5S
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
 
 [printer:Original Prusa i3 MK2.5S 0.6 nozzle]
 inherits = Original Prusa i3 MK2.5 0.6 nozzle
 printer_model = MK2.5S
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0
 
 [printer:Original Prusa i3 MK2.5S MMU2S Single]
 inherits = Original Prusa i3 MK2.5; *mm2s*
@@ -2631,7 +3506,7 @@ machine_min_travel_rate = 0
 default_print_profile = 0.15mm OPTIMAL MK2.5
 default_filament_profile = Prusament PLA
 printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK2.5\n
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n
 end_gcode = G1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors
 
 [printer:Original Prusa i3 MK2.5S MMU2S Single 0.6 nozzle]
@@ -2650,8 +3525,9 @@ max_layer_height = 0.15
 min_layer_height = 0.05
 nozzle_diameter = 0.25
 printer_variant = 0.25
+retract_lift = 0.15
 default_print_profile = 0.10mm DETAIL 0.25 nozzle
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F1400.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F1400.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n
 
 [printer:Original Prusa i3 MK2.5S MMU2S]
 inherits = Original Prusa i3 MK2.5; *mm2s*
@@ -2684,7 +3560,7 @@ single_extruder_multi_material = 1
 # to be defined explicitely.
 nozzle_diameter = 0.4,0.4,0.4,0.4,0.4
 extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E29.0 F1073.0\nG1 X5.0 E29.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\nG92 E0.0\n
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E29.0 F1073.0\nG1 X5.0 E29.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\nG92 E0.0\n
 end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors\n
 
 [printer:Original Prusa i3 MK2.5S MMU2S 0.6 nozzle]
@@ -2731,7 +3607,7 @@ remaining_times = 1
 printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK3\n
 retract_lift_below = 209
 max_print_height = 210
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
 printer_model = MK3
 default_print_profile = 0.15mm QUALITY MK3
 
@@ -2741,7 +3617,8 @@ nozzle_diameter = 0.25
 max_layer_height = 0.15
 min_layer_height = 0.05
 printer_variant = 0.25
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E8.0 F700.0 ; intro line\nG1 X100.0 E12.5 F700.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
+retract_lift = 0.15
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E8.0 F700.0 ; intro line\nG1 X100.0 E12.5 F700.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
 default_print_profile = 0.10mm DETAIL 0.25 nozzle MK3
 
 [printer:Original Prusa i3 MK3 0.6 nozzle]
@@ -2755,17 +3632,17 @@ default_print_profile = 0.30mm QUALITY 0.6 nozzle MK3
 [printer:Original Prusa i3 MK3S]
 inherits = Original Prusa i3 MK3
 printer_model = MK3S
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
 
 [printer:Original Prusa i3 MK3S 0.25 nozzle]
 inherits = Original Prusa i3 MK3 0.25 nozzle
 printer_model = MK3S
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E8.0 F700.0 ; intro line\nG1 X100.0 E12.5 F700.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E8.0 F700.0 ; intro line\nG1 X100.0 E12.5 F700.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
 
 [printer:Original Prusa i3 MK3S 0.6 nozzle]
 inherits = Original Prusa i3 MK3 0.6 nozzle
 printer_model = MK3S
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Y-3.0 F1000.0 ; go outside print area\nG92 E0.0\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E12.5 F1000.0 ; intro line\nG92 E0.0\nM221 S{if layer_height<0.075}100{else}95{endif}
 
 [printer:*mm2*]
 inherits = Original Prusa i3 MK3
@@ -2795,7 +3672,7 @@ default_filament_profile = Prusament PLA MMU2
 inherits = *mm2*
 single_extruder_multi_material = 0
 default_filament_profile = Prusament PLA
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
 end_gcode = G1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors
 
 [printer:Original Prusa i3 MK3 MMU2 Single 0.6 nozzle]
@@ -2814,7 +3691,8 @@ nozzle_diameter = 0.25
 max_layer_height = 0.15
 min_layer_height = 0.05
 printer_variant = 0.25
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F1000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F1400.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
+retract_lift = 0.15
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 E8.0 F1000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F1400.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
 default_print_profile = 0.10mm DETAIL 0.25 nozzle MK3
 
 [printer:Original Prusa i3 MK3 MMU2]
@@ -2825,14 +3703,14 @@ inherits = *mm2*
 machine_max_acceleration_e = 8000,8000
 nozzle_diameter = 0.4,0.4,0.4,0.4,0.4
 extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E32.0 F1073.0\nG1 X5.0 E32.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
 end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors\n
 
 [printer:Original Prusa i3 MK3S MMU2S Single]
 inherits = *mm2s*
 single_extruder_multi_material = 0
 default_filament_profile = Prusament PLA
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
 end_gcode = G1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors
 
 [printer:Original Prusa i3 MK3S MMU2S Single 0.6 nozzle]
@@ -2851,7 +3729,8 @@ nozzle_diameter = 0.25
 max_layer_height = 0.15
 min_layer_height = 0.05
 printer_variant = 0.25
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F1400.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
+retract_lift = 0.15
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\nG21 ; set units to millimeters\n\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nTc\n; purge line\nG1 X55.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F1400.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
 default_print_profile = 0.10mm DETAIL 0.25 nozzle MK3
 
 [printer:Original Prusa i3 MK3S MMU2S]
@@ -2859,7 +3738,7 @@ inherits = *mm2s*
 machine_max_acceleration_e = 8000,8000
 nozzle_diameter = 0.4,0.4,0.4,0.4,0.4
 extruder_colour = #FF8000;#DB5182;#00FFFF;#FF4F4F;#9FFF9F
-start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E29.0 F1073.0\nG1 X5.0 E29.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
+start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.8.1 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG21 ; set units to millimeters\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3.0 F1000.0\nG1 Z0.4 F1000.0\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55.0 E29.0 F1073.0\nG1 X5.0 E29.0 F1800.0\nG1 X55.0 E8.0 F2000.0\nG1 Z0.3 F1000.0\nG92 E0.0\nG1 X240.0 E25.0 F2200.0\nG1 Y-2.0 F1000.0\nG1 X55.0 E25 F1400.0\nG1 Z0.20 F1000.0\nG1 X5.0 E4.0 F1000.0\nG92 E0.0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0.0\n
 end_gcode = {if has_wipe_tower}\nG1 E-15.0000 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15.0000 F5800\nG1 E-20.0000 F5500\nG1 E10.0000 F3000\nG1 E-10.0000 F3100\nG1 E10.0000 F3150\nG1 E-10.0000 F3250\nG1 E10.0000 F3300\n{endif}\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n; Lift print head a bit\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors\n
 
 ## 0.6mm nozzle MMU2/S printer profiles
@@ -2880,6 +3759,68 @@ min_layer_height = 0.15
 printer_variant = 0.6
 default_print_profile = 0.30mm QUALITY 0.6 nozzle MK3
 
+## MINI
+
+[printer:Original Prusa MINI]
+inherits = *common*
+printer_model = MINI
+printer_technology = FFF
+printer_variant = 0.4
+printer_vendor =
+bed_shape = 0x0,180x0,180x180,0x180
+default_filament_profile = "Prusament PLA MINI"
+default_print_profile = 0.15mm QUALITY MINI
+gcode_flavor = marlin
+machine_max_acceleration_e = 5000
+machine_max_acceleration_extruding = 1250
+machine_max_acceleration_retracting = 1250
+machine_max_acceleration_x = 1250
+machine_max_acceleration_y = 1250
+machine_max_acceleration_z = 400
+machine_max_feedrate_e = 80
+machine_max_feedrate_x = 180
+machine_max_feedrate_y = 180
+machine_max_feedrate_z = 12
+machine_max_jerk_e = 10
+machine_max_jerk_x = 8
+machine_max_jerk_y = 8
+machine_max_jerk_z = 2
+machine_min_extruding_rate = 0
+machine_min_travel_rate = 0
+max_layer_height = 0.25
+max_print_height = 180
+min_layer_height = 0.07
+nozzle_diameter = 0.4
+retract_length = 3.2
+retract_lift = 0.2
+retract_speed = 70
+deretract_speed = 40
+wipe = 1
+retract_before_wipe = 70%
+retract_before_travel = 1.5
+retract_lift_above = 0
+retract_lift_below = 179
+retract_layer_change = 0
+silent_mode = 0
+remaining_times = 1
+start_gcode = M569 S0 E \nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM92 E317 ; set steps/unit for extruder\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0.0\nG1 Y-2.0 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110.0 E8.0 F900\nG1 X40.0 E10.0 F700\nG92 E0.0\n\nM221 S95 ; set flow
+end_gcode = G1 E-1 F2100 ; retract\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+5, max_print_height)}{endif} F720 ; Move print head up\nG1 X0 Y180 F4200 ; park print head\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM84 ; disable motors
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n
+extruder_colour = 
+
+[printer:Original Prusa MINI 0.25 nozzle]
+inherits = Original Prusa MINI
+printer_variant = 0.25
+nozzle_diameter = 0.25
+retract_length = 3
+retract_lift = 0.15
+retract_speed = 70
+deretract_speed = 40
+wipe = 1
+retract_before_wipe = 70%
+retract_before_travel = 1
+start_gcode = M569 S0 E \nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM92 E317 ; set steps/unit for extruder\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0.0\nG1 Y-2.0 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110.0 E8.0 F600\nG1 X40.0 E10.0 F400\nG92 E0.0\n\nM221 S95 ; set flow
+
 [printer:Original Prusa SL1]
 printer_technology = SLA
 printer_model = SL1

From 2dec84a429326b9a95f3c572bae263c6dbe7b72f Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 15 Nov 2019 09:28:51 +0100
Subject: [PATCH 81/84] Added model and texture for Mini and Ender3 printer
 printbeds

---
 resources/icons/bed/ender3.svg  |  47 +++++++++++++++++++++
 resources/icons/bed/mini.svg    |  70 ++++++++++++++++++++++++++++++++
 resources/models/ender3_bed.stl | Bin 0 -> 50484 bytes
 resources/models/mini_bed.stl   | Bin 0 -> 648084 bytes
 src/slic3r/GUI/3DBed.cpp        |  66 +++++++++++++++---------------
 src/slic3r/GUI/3DBed.hpp        |   2 +
 6 files changed, 153 insertions(+), 32 deletions(-)
 create mode 100644 resources/icons/bed/ender3.svg
 create mode 100644 resources/icons/bed/mini.svg
 create mode 100644 resources/models/ender3_bed.stl
 create mode 100644 resources/models/mini_bed.stl

diff --git a/resources/icons/bed/ender3.svg b/resources/icons/bed/ender3.svg
new file mode 100644
index 000000000..06910afdf
--- /dev/null
+++ b/resources/icons/bed/ender3.svg
@@ -0,0 +1,47 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="220.5mm" height="220.5mm" viewBox="0 0 625.1 625.1">
+  <title>ender3_bed_texture</title>
+  <g>
+    <path d="M522.6,597.9h-8.1V583.2h8.1v1.5h-6.4v4.8h6V591h-6v5.3h6.4Z" style="fill: #fff"/>
+    <path d="M533.1,597.9v-7.1a2.8,2.8,0,0,0-.6-2,2.2,2.2,0,0,0-1.9-.7,3.2,3.2,0,0,0-2.5.9,4.6,4.6,0,0,0-.8,3.1v5.8h-1.7v-11H527l.2,1.5h.1a3.8,3.8,0,0,1,1.5-1.3,4.2,4.2,0,0,1,2-.4,4,4,0,0,1,3,1,3.8,3.8,0,0,1,1,3v7.2Z" style="fill: #fff"/>
+    <path d="M545.7,596.4h-.1a4.4,4.4,0,0,1-6.8.2,8,8,0,0,1,0-8.4,4,4,0,0,1,3.3-1.5,4.1,4.1,0,0,1,3.5,1.6h.1v-6h1.6v15.6h-1.3Zm-3.4.3a2.8,2.8,0,0,0,2.5-1,4.6,4.6,0,0,0,.8-2.9v-.4a5.5,5.5,0,0,0-.8-3.3,2.8,2.8,0,0,0-2.5-1,2.5,2.5,0,0,0-2.2,1.1,6.1,6.1,0,0,0-.8,3.2,5.6,5.6,0,0,0,.8,3.2A2.5,2.5,0,0,0,542.3,596.7Z" style="fill: #fff"/>
+    <path d="M555.4,598.1a4.9,4.9,0,0,1-3.8-1.5,5.5,5.5,0,0,1-1.4-4.1,6,6,0,0,1,1.3-4.2,4.1,4.1,0,0,1,3.5-1.6,3.9,3.9,0,0,1,3.2,1.4,5,5,0,0,1,1.2,3.5v1.1h-7.5a4.2,4.2,0,0,0,.9,2.9,3.5,3.5,0,0,0,2.7,1,9.1,9.1,0,0,0,3.5-.7v1.5l-1.7.5Zm-.5-10a3.2,3.2,0,0,0-2.1.8,4.3,4.3,0,0,0-.9,2.4h5.7a3.6,3.6,0,0,0-.7-2.4A2.5,2.5,0,0,0,554.9,588.1Z" style="fill: #fff"/>
+    <path d="M567.3,586.7h1.3l-.3,1.6-1.2-.2a2.9,2.9,0,0,0-2.2,1.1,3.6,3.6,0,0,0-1,2.7v5.9h-1.6v-11h1.3l.2,2h.1a4.6,4.6,0,0,1,1.5-1.6A3.1,3.1,0,0,1,567.3,586.7Z" style="fill: #fff"/>
+    <path d="M584.3,586.7a3.6,3.6,0,0,1-.8,2.3,4,4,0,0,1-2.2,1.2h0a4.9,4.9,0,0,1,2.6,1.2,3.4,3.4,0,0,1,.8,2.3,3.9,3.9,0,0,1-1.4,3.2,6.6,6.6,0,0,1-4.2,1.2l-2.1-.2a7,7,0,0,1-1.9-.6v-1.6l2.1.7,2,.3c2.5,0,3.8-1,3.8-3s-1.4-2.7-4.2-2.7h-1.4v-1.4h1.4a4.1,4.1,0,0,0,2.7-.8,2.4,2.4,0,0,0,1-2.1,1.9,1.9,0,0,0-.7-1.6,2.6,2.6,0,0,0-2-.7,5.7,5.7,0,0,0-1.8.3,7,7,0,0,0-1.9,1l-.9-1.2a10.3,10.3,0,0,1,2.1-1.1,10.1,10.1,0,0,1,2.5-.4,4.8,4.8,0,0,1,3.3,1A3.2,3.2,0,0,1,584.3,586.7Z" style="fill: #fff"/>
+  </g>
+  <path d="M567.7,567.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <path d="M.8,624.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="624.4" y1="624.4" x2="624.4" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <path d="M57.4,57.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <path d="M624.4.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="0.8" y1="0.8" x2="0.8" y2="624.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="0.8" y1="624.4" x2="0.8" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="624.4" y1="0.8" x2="624.4" y2="624.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="0.8" y1="624.4" x2="624.4" y2="624.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="0.8" y1="0.8" x2="624.4" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <g>
+    <path d="M567.7,440.2" style="fill: none"/>
+    <path d="M57.4,440.2" style="fill: none"/>
+    <path d="M567.7,312.6" style="fill: none"/>
+    <path d="M57.4,312.6" style="fill: none"/>
+    <path d="M57.4,184.9" style="fill: none"/>
+    <path d="M567.7,184.9" style="fill: none"/>
+    <path d="M185,57.3" style="fill: none"/>
+    <path d="M185,567.8" style="fill: none"/>
+    <path d="M312.6,567.8" style="fill: none"/>
+    <path d="M312.6,57.3" style="fill: none"/>
+    <path d="M440.1,57.3" style="fill: none"/>
+    <path d="M440.1,541.3" style="fill: none"/>
+  </g>
+  <g>
+    <path d="M430.9,398H194.2V227.1H430.9Zm-56.7-90.7a2.5,2.5,0,0,0,.2-.6c-.1-.4-.1-.8-.2-1.1-.8-4.3-1-8.6.9-12.8,1-2.2.8-4.4.5-6.7a9.7,9.7,0,0,1,.1-1.7c.4-2.2.8-4.4-.8-6.2a3.9,3.9,0,0,1-.9-3.1c0-2.9-.8-4.2-3.6-5.2a24.5,24.5,0,0,0-3.7-.8,3.6,3.6,0,0,1-3-2.6c-.1-.8-.3-1.6-.4-2.4a6.4,6.4,0,0,0-4.6-5.6,26.3,26.3,0,0,1-8.4-4.1,4.5,4.5,0,0,1-1.6-4.4,2.7,2.7,0,0,0,0-.9c-.3.3-.8.5-.8.8a4.9,4.9,0,0,0,1.7,5.1,25,25,0,0,0,7.4,3.9c4.1,1.2,5.4,2.7,5.8,7.1a4.3,4.3,0,0,0,3.6,3.9,11.3,11.3,0,0,0,1.8.3c3.9.6,5.5,2.5,4.6,6.3,0,.1-.1.2-.2.3h-1.1c-.5-2.6-1.2-3.2-3.8-3.2h-6.8a2.1,2.1,0,0,1-2.3-1.7c-.3-1.4-.5-2.8-.7-4.1a4.2,4.2,0,0,0-2.5-4c-2.3-.9-4.6-1.9-7-2.6a16,16,0,0,1-6.8-3.9,6.2,6.2,0,0,1-.7-8.2,3.7,3.7,0,0,0,.5-1.1c-.4-.1-.7,0-.8.2a7.1,7.1,0,0,0-.9,8.1,12.9,12.9,0,0,0,6.6,5.1l8.1,2.9c2,.7,2.5,1.7,2.7,3.8a22.3,22.3,0,0,0,.8,4.5c.5,1.5,1.5,2,3.1,2h7a2.7,2.7,0,0,1,1.3.2,1.9,1.9,0,0,1,.7,1.4,1.4,1.4,0,0,1-.7,1l-5.1,2.4a10.4,10.4,0,0,1-9.1.4l-4.9-2c-6.7-3.1-12-7.6-15-14.6a10.2,10.2,0,0,0-6.5-5.8,11.4,11.4,0,0,1-6.3-5.5c-2.1-4-1.8-8.1-.7-12.2.5-1.7,1.3-3.4,1.9-5.2l-.6.6c-3.4,5-6.1,10.3-6.4,16.5-.1,1.2-.1,2.4-.1,3.6s-.3,1-1,.8a14.8,14.8,0,0,1-7.9-5,36.6,36.6,0,0,1-5.1-9.8c-.6-1.6-1.1-3.2-1.6-4.8-.5.4-.7.7-.7,1.1a29.4,29.4,0,0,0-.5,5.1c.1,2.9.6,5.7.8,8.6s-.8,3.7-2.8,3.6a49.8,49.8,0,0,1-5.3-.5c-4.4-.5-8.8-1.3-13.3-.6s-6.1,1.3-9.1,2a1.1,1.1,0,0,1-1.5-.5,3.8,3.8,0,0,0-3.1-1.7l-7-.6-.3.2a3.4,3.4,0,0,0,3,1.7c1.2.1,2.5.1,3.7.3a4.2,4.2,0,0,1,1.7,1,2.6,2.6,0,0,1-1.5.6c-4.2.1-8.4.4-12.7.1a14.4,14.4,0,0,1-7.7-2.3c-.6-.4-1.4-1-2.3-.3a5,5,0,0,0,1.2,1.3c4.2,2.9,8.8,5,14,5.1a77.9,77.9,0,0,0,18.6-1.5,30,30,0,0,1,17.3,1.4l-6.3.4-2.7.5-8.3.9-11.7,1.9a1.6,1.6,0,0,1-1.7-.6,7,7,0,0,0-4.9-2l-5.5.4a12.2,12.2,0,0,1-9-2.6l-1-.5c.4.7.6,1.2.9,1.6,1.8,2.6,4.2,4.2,7.5,3.9a29.5,29.5,0,0,1,4.2-.1c1,0,2,.3,3,.4v.5c-11.9,1.3-23.4.6-33-8a3.7,3.7,0,0,0,1.2,3.5c6.4,6.5,14.6,9.3,23.4,10.2a73.3,73.3,0,0,0,19.8-1.1,90.3,90.3,0,0,1,17.2-1.6,26,26,0,0,1,3.9.5v.4l-4.7,3.2c-3.7,2.5-7.4,4.9-11.7,6.3s-9.1,3.4-14,3.8-9,.5-13.5.8a3.4,3.4,0,0,0-1,0c-.3.2-.8.5-.9.8a1.4,1.4,0,0,0,.5,1,3.7,3.7,0,0,0,1.8.5h5.8l10-.2c1.7,0,3.3-.5,5-.5,5.5.2,10.7-1.4,15.9-3s7.9-2.1,12-2,10.1.2,15.1.5c2.8.1,5.5.9,7.4,3.3.6.7.7,1.3-.2,1.7s-2.8,1.6-4.3,1.7a69.2,69.2,0,0,1-9.1-.3c-1.1,0-2.3-.3-3.4-.4a1.6,1.6,0,0,0,.9.9c1.7,1,3.4,2,5.2,2.9a70.3,70.3,0,0,0,7.8,3.8c2.4,1,5,1.7,7.4,2.5a47.9,47.9,0,0,1,12.8,5.9,51.3,51.3,0,0,1,8.8,8,16.9,16.9,0,0,1,2.3,3.6c.8,1.7.6,2.7-.9,3.9s-6.1,2.2-9.3,1.2-8.2-4.6-11.1-8.5l-.7-.9h-.3c.3.9.6,1.9,1,2.8a22.2,22.2,0,0,0,6.6,8c.3.2.4.6.7.9s-.7.5-1,.5a33.9,33.9,0,0,1-4.5.2,45.8,45.8,0,0,1-13-3.6l-6.5-2.8a.9.9,0,0,0,.4.6c4.7,2.5,9.3,5.1,14.1,7.5a12.6,12.6,0,0,0,5.1,1.5,47.1,47.1,0,0,0,21.6-3.8l3.3-1.6c2.8-1.5,5.7-3,8.4-4.7.6-.3,1.3-1.3,1.2-1.6s-1.4-.2-2.1-.1-.7-.1-1.1-.1a3.8,3.8,0,0,1,.3-1c.7-.9,1.3-1.9,2.2-3a30.2,30.2,0,0,0-4.5,1.4,2.2,2.2,0,0,1-2.9-.8,30.1,30.1,0,0,1-4.5-8.5,24.3,24.3,0,0,1-1.4-9.7c.1-1.7,1.1-3.1,2.7-3.2a18.9,18.9,0,0,1,5.3.2,26.1,26.1,0,0,1,5.4,2.5,14.5,14.5,0,0,1,6.6,7.2,3.7,3.7,0,0,1-.6,4,24,24,0,0,0-1.7,3.2l.4.2,2.8-1.9v.3a2.5,2.5,0,0,0,1.5-.2c1.4-.8,1.8-.8,2.9.6S373.6,306.3,374.2,307.3ZM236.7,355.8c.2-.6.2-.8.3-1.1,2.4-5.1,4.8-10.1,7.1-15.3a2.2,2.2,0,0,1,2.2-1.4h12.3a22.8,22.8,0,0,1,4.4.5c2.1.4,2.6,1.1,2.4,3.3a27,27,0,0,1-.7,4.1c3.3.3,4-.1,5.2-2.9l2.4-5.3c.6-1.5,1.3-3,1.9-4.6H231.8a4,4,0,0,0-2.3,1,2.4,2.4,0,0,0-.6,1.7c.1.8.9.8,1.6.8l1.9.3a1.5,1.5,0,0,1,1.3,2.1,21.3,21.3,0,0,1-1.1,3.3c-5.4,11.5-10.8,23-16.1,34.6-1.6,3.4-3.9,5.7-8,5.6a3.5,3.5,0,0,0-2.3,1.5c-.9,1.2-.4,2,1.1,2h41.8a1.9,1.9,0,0,0,1.7-.9l5.4-7.3c1.3-1.7,2.6-3.3,3.7-5a1.5,1.5,0,0,0,.2-1.3c-.1-.3-.7-.5-1.1-.6a3.2,3.2,0,0,0-3.2,1.3,22,22,0,0,1-2.7,2.6,19.3,19.3,0,0,1-8.3,5.1c-6.1,1.6-12.2,1.1-18.4.8-1.1-.1-1.3-.5-.7-1.7,2.7-5.8,5.4-11.6,8.2-17.4a1.5,1.5,0,0,1,1.3-.8c2.1-.1,4.2,0,6.3,0h6.1c3.1.2,3.7.9,3.1,3.9-.2,1.1-.5,2.2-.8,3.4,2.5.4,4-.2,5-2.7s2.1-4.5,3.1-6.7l4-8.7c.6-1.2.2-1.6-1.1-1.8a2.6,2.6,0,0,0-2.8,1.5,10.5,10.5,0,0,1-1.8,2.5c-1.1,1.6-2.5,2.9-4.5,3Zm88.6,27.8c-.3.8-.5,1.1-.6,1.5a3.2,3.2,0,0,0-.1,1.3,1.9,1.9,0,0,0,1.5.2l4.6-1.3,8.8-2.7a2.1,2.1,0,0,0,1.4-2.2c0-1-.9-1-1.7-1-2.5-.1-2.7-.5-1.7-2.7,2.5-5.5,5-10.9,7.6-16.3l12.6-27.2a1.7,1.7,0,0,0,0-1.4,1.8,1.8,0,0,0-1.3-.2l-12.8,3.2a2.9,2.9,0,0,0-1.8,2.3c.2,1.3,1.2,1,2.1,1h.3c2,0,2.2.4,1.4,2.2L342,348l-1.1,2.4a21.3,21.3,0,0,0-3.6-1.5,14.9,14.9,0,0,0-8.1.4c-5.6,1.6-10.2,4.9-14.3,8.9s-8.8,11.1-9.9,18.3c-.8,4.7,1.3,8.6,5.3,9.7a19,19,0,0,0,6.3.4A18.5,18.5,0,0,0,325.3,383.6Zm-54.1-28.8,2.2.3c1.8-.1,2.1.2,1.5,2-.1.2-.1.4-.2.6-3.4,7.2-6.8,14.4-10.1,21.6a5.7,5.7,0,0,1-5,3.5,2.8,2.8,0,0,0-1.9.9,1.6,1.6,0,0,0-.5,1.6c0,.3.8.7,1.3.7h14.9a5.8,5.8,0,0,0,2.2-.8,2.1,2.1,0,0,0,.8-1.6c0-.3-.8-.8-1.3-.9-2.3-.3-2.7-.9-1.8-3a3.6,3.6,0,0,1,.4-.9c2.5-5.4,5.2-10.6,7.4-16.1a11.8,11.8,0,0,1,7.1-6.9,1.9,1.9,0,0,1,.8-.3,15.8,15.8,0,0,1,3.8-.5c1.8.1,2.6,1,2.1,2.8s-1.6,4.4-2.5,6.5c-2.3,5-4.7,9.9-7.1,14.8-1,2.1-2.5,3.6-5,3.7a3.3,3.3,0,0,0-2,1.1,1.7,1.7,0,0,0-.3,1.4c.1.4.8.7,1.2.7h15a3.4,3.4,0,0,0,2.3-1.3c.8-.8.3-1.7-.8-1.9s-2.4-.7-1.7-2.8a6.1,6.1,0,0,1,.5-1.2c2.6-5.5,5.2-11,7.7-16.6a32.3,32.3,0,0,0,2.2-5.9c1.1-4.6-1.2-7.5-5.9-7.6s-7.1,1.3-10.3,3.1l-2.4,1.4a8.5,8.5,0,0,1,.8-2.4c.3-.6.8-1.4.1-1.8a2.7,2.7,0,0,0-1.8-.1c-3.6,1-7.2,2.1-10.9,3C272.5,352.1,271.6,352.8,271.2,354.8Zm110.5,17.5-.7-.5c-1.1-.8-1.9-.6-2.9.3s-3.5,3-5.3,4.3a16.7,16.7,0,0,1-10.6,3,5.8,5.8,0,0,1-5.6-5.4,18.6,18.6,0,0,1,1.5-7.7,2.1,2.1,0,0,1,2.4-1.7h20.6c2.1,0,2.9-.6,3.5-2.6a32,32,0,0,0,1-4.2c.7-4.9-1.6-8.2-6.4-9a20,20,0,0,0-12,1.7c-8.2,3.6-14,9.7-17.8,17.8-1.6,3.4-2.9,6.9-2.6,10.8s1.7,5.5,4.8,6.7a16,16,0,0,0,9.2.5,30,30,0,0,0,13.5-6.6A32.9,32.9,0,0,0,381.7,372.3Zm25.5-19.5c.3-.7.8-1.6,1.1-2.5s.2-1.1-.1-1.4a1.8,1.8,0,0,0-1.3-.1l-4.4,1.3-9.1,2.6a2.1,2.1,0,0,0-1.6,2.1c0,1.3,1.1,1.1,2,1,2.7-.3,3,.1,1.9,2.5l-9.9,21.3a4.4,4.4,0,0,1-3.3,2.6l-3.3.6c-.6.2-1.6,1.6-1.4,2.2s.8,1,1.6,1h17.7c1-.2,2.4-1.5,2.3-2.2s-1.3-1-2.1-1.1c-2.8-.4-3.2-1-2.3-3.6l.3-.9c2.4-5.2,4.9-10.2,7.2-15.4a13.7,13.7,0,0,1,6.4-6.8c1.1-.6,1.8-.5,2.5.5a3.9,3.9,0,0,0,5,1.3,8,8,0,0,0,4.9-5.8,2.5,2.5,0,0,0-2.3-3.3,9.9,9.9,0,0,0-4.2.4A76,76,0,0,0,407.2,352.8Z" style="fill: none"/>
+    <path d="M374.2,307.3c-.6-1-1.1-1.7-1.6-2.4s-1.5-1.4-2.9-.6a2.5,2.5,0,0,1-1.5.2v-.3l-2.8,1.9-.4-.2a24,24,0,0,1,1.7-3.2,3.7,3.7,0,0,0,.6-4,14.5,14.5,0,0,0-6.6-7.2,26.1,26.1,0,0,0-5.4-2.5,18.9,18.9,0,0,0-5.3-.2c-1.6.1-2.6,1.5-2.7,3.2a24.3,24.3,0,0,0,1.4,9.7,30.1,30.1,0,0,0,4.5,8.5,2.2,2.2,0,0,0,2.9.8,30.2,30.2,0,0,1,4.5-1.4c-.9,1.1-1.5,2.1-2.2,3a3.8,3.8,0,0,0-.3,1c.4,0,.8.2,1.1.1s1.6-.9,2.1.1-.6,1.3-1.2,1.6c-2.7,1.7-5.6,3.2-8.4,4.7l-3.3,1.6a47.1,47.1,0,0,1-21.6,3.8,12.6,12.6,0,0,1-5.1-1.5c-4.8-2.4-9.4-5-14.1-7.5a.9.9,0,0,1-.4-.6l6.5,2.8a45.8,45.8,0,0,0,13,3.6,33.9,33.9,0,0,0,4.5-.2c.3,0,.6-.3,1-.5s-.4-.7-.7-.9a22.2,22.2,0,0,1-6.6-8c-.4-.9-.7-1.9-1-2.8h.3l.7.9c2.9,3.9,6.4,7,11.1,8.5s6.5,1.2,9.3-1.2,1.7-2.2.9-3.9a16.9,16.9,0,0,0-2.3-3.6,51.3,51.3,0,0,0-8.8-8,47.9,47.9,0,0,0-12.8-5.9c-2.4-.8-5-1.5-7.4-2.5a70.3,70.3,0,0,1-7.8-3.8c-1.8-.9-3.5-1.9-5.2-2.9a1.6,1.6,0,0,1-.9-.9c1.1.1,2.3.4,3.4.4a69.2,69.2,0,0,0,9.1.3c1.5-.1,2.9-1,4.3-1.7s.8-1,.2-1.7c-1.9-2.4-4.6-3.2-7.4-3.3-5-.3-10.1-.3-15.1-.5s-8,.9-12,2-10.4,3.2-15.9,3c-1.7,0-3.3.5-5,.5l-10,.2h-5.8a3.7,3.7,0,0,1-1.8-.5,1.4,1.4,0,0,1-.5-1c.1-.3.6-.6.9-.8a3.4,3.4,0,0,1,1,0c4.5-.3,9-.4,13.5-.8s9.4-2.3,14-3.8,8-3.8,11.7-6.3l4.7-3.2v-.4a26,26,0,0,0-3.9-.5,90.3,90.3,0,0,0-17.2,1.6,73.3,73.3,0,0,1-19.8,1.1c-8.8-.9-17-3.7-23.4-10.2a3.7,3.7,0,0,1-1.2-3.5c9.6,8.6,21.1,9.3,33,8v-.5c-1-.1-2-.4-3-.4a29.5,29.5,0,0,0-4.2.1c-3.3.3-5.7-1.3-7.5-3.9-.3-.4-.5-.9-.9-1.6l1,.5a12.2,12.2,0,0,0,9,2.6l5.5-.4a7,7,0,0,1,4.9,2,1.6,1.6,0,0,0,1.7.6l11.7-1.9,8.3-.9,2.7-.5,6.3-.4a30,30,0,0,0-17.3-1.4,77.9,77.9,0,0,1-18.6,1.5c-5.2-.1-9.8-2.2-14-5.1a5,5,0,0,1-1.2-1.3c.9-.7,1.7-.1,2.3.3a14.4,14.4,0,0,0,7.7,2.3c4.3.3,8.5,0,12.7-.1a2.6,2.6,0,0,0,1.5-.6,4.2,4.2,0,0,0-1.7-1c-1.2-.2-2.5-.2-3.7-.3a3.4,3.4,0,0,1-3-1.7l.3-.2,7,.6a3.8,3.8,0,0,1,3.1,1.7,1.1,1.1,0,0,0,1.5.5c3-.7,6-1.5,9.1-2s8.9.1,13.3.6a49.8,49.8,0,0,0,5.3.5c2,.1,2.9-1.3,2.8-3.6s-.7-5.7-.8-8.6a29.4,29.4,0,0,1,.5-5.1c0-.4.2-.7.7-1.1.5,1.6,1,3.2,1.6,4.8a36.6,36.6,0,0,0,5.1,9.8,14.8,14.8,0,0,0,7.9,5c.7.2,1.1,0,1-.8s0-2.4.1-3.6c.3-6.2,3-11.5,6.4-16.5l.6-.6c-.6,1.8-1.4,3.5-1.9,5.2-1.1,4.1-1.4,8.2.7,12.2a11.4,11.4,0,0,0,6.3,5.5,10.2,10.2,0,0,1,6.5,5.8c3,7,8.3,11.5,15,14.6l4.9,2a10.4,10.4,0,0,0,9.1-.4l5.1-2.4a1.4,1.4,0,0,0,.7-1,1.9,1.9,0,0,0-.7-1.4,2.7,2.7,0,0,0-1.3-.2h-7c-1.6,0-2.6-.5-3.1-2a22.3,22.3,0,0,1-.8-4.5c-.2-2.1-.7-3.1-2.7-3.8l-8.1-2.9a12.9,12.9,0,0,1-6.6-5.1,7.1,7.1,0,0,1,.9-8.1c.1-.2.4-.3.8-.2a3.7,3.7,0,0,1-.5,1.1,6.2,6.2,0,0,0,.7,8.2,16,16,0,0,0,6.8,3.9c2.4.7,4.7,1.7,7,2.6a4.2,4.2,0,0,1,2.5,4c.2,1.3.4,2.7.7,4.1a2.1,2.1,0,0,0,2.3,1.7h6.8c2.6,0,3.3.6,3.8,3.2h1.1c.1-.1.2-.2.2-.3.9-3.8-.7-5.7-4.6-6.3a11.3,11.3,0,0,1-1.8-.3,4.3,4.3,0,0,1-3.6-3.9c-.4-4.4-1.7-5.9-5.8-7.1a25,25,0,0,1-7.4-3.9,4.9,4.9,0,0,1-1.7-5.1c0-.3.5-.5.8-.8a2.7,2.7,0,0,1,0,.9,4.5,4.5,0,0,0,1.6,4.4,26.3,26.3,0,0,0,8.4,4.1,6.4,6.4,0,0,1,4.6,5.6c.1.8.3,1.6.4,2.4a3.6,3.6,0,0,0,3,2.6,24.5,24.5,0,0,1,3.7.8c2.8,1,3.6,2.3,3.6,5.2a3.9,3.9,0,0,0,.9,3.1c1.6,1.8,1.2,4,.8,6.2a9.7,9.7,0,0,0-.1,1.7c.3,2.3.5,4.5-.5,6.7-1.9,4.2-1.7,8.5-.9,12.8.1.3.1.7.2,1.1A2.5,2.5,0,0,1,374.2,307.3Zm-36.6-30.7v-.5l-8.5-6.1-.3.3a1.6,1.6,0,0,0,.2,1l3.9,6.5a1.8,1.8,0,0,0,.8.5Z" style="fill: #fff"/>
+    <path d="M236.7,355.8l15.1-.5c2-.1,3.4-1.4,4.5-3a10.5,10.5,0,0,0,1.8-2.5,2.6,2.6,0,0,1,2.8-1.5c1.3.2,1.7.6,1.1,1.8l-4,8.7c-1,2.2-2.2,4.4-3.1,6.7s-2.5,3.1-5,2.7c.3-1.2.6-2.3.8-3.4.6-3,0-3.7-3.1-3.9h-6.1c-2.1,0-4.2-.1-6.3,0a1.5,1.5,0,0,0-1.3.8c-2.8,5.8-5.5,11.6-8.2,17.4-.6,1.2-.4,1.6.7,1.7,6.2.3,12.3.8,18.4-.8a19.3,19.3,0,0,0,8.3-5.1,22,22,0,0,0,2.7-2.6,3.2,3.2,0,0,1,3.2-1.3c.4.1,1,.3,1.1.6a1.5,1.5,0,0,1-.2,1.3c-1.1,1.7-2.4,3.3-3.7,5l-5.4,7.3a1.9,1.9,0,0,1-1.7.9H207.3c-1.5,0-2-.8-1.1-2a3.5,3.5,0,0,1,2.3-1.5c4.1.1,6.4-2.2,8-5.6,5.3-11.6,10.7-23.1,16.1-34.6a21.3,21.3,0,0,0,1.1-3.3,1.5,1.5,0,0,0-1.3-2.1l-1.9-.3c-.7,0-1.5,0-1.6-.8a2.4,2.4,0,0,1,.6-1.7,4,4,0,0,1,2.3-1h42.4c-.6,1.6-1.3,3.1-1.9,4.6l-2.4,5.3c-1.2,2.8-1.9,3.2-5.2,2.9a27,27,0,0,0,.7-4.1c.2-2.2-.3-2.9-2.4-3.3a22.8,22.8,0,0,0-4.4-.5H246.3a2.2,2.2,0,0,0-2.2,1.4c-2.3,5.2-4.7,10.2-7.1,15.3C236.9,355,236.9,355.2,236.7,355.8Z" style="fill: #fff"/>
+    <path d="M325.3,383.6a18.5,18.5,0,0,1-8.7,3,19,19,0,0,1-6.3-.4c-4-1.1-6.1-5-5.3-9.7,1.1-7.2,4.7-13.2,9.9-18.3s8.7-7.3,14.3-8.9a14.9,14.9,0,0,1,8.1-.4,21.3,21.3,0,0,1,3.6,1.5L342,348l3.6-7.7c.8-1.8.6-2.2-1.4-2.2h-.3c-.9,0-1.9.3-2.1-1a2.9,2.9,0,0,1,1.8-2.3l12.8-3.2a1.8,1.8,0,0,1,1.3.2,1.7,1.7,0,0,1,0,1.4l-12.6,27.2c-2.6,5.4-5.1,10.8-7.6,16.3-1,2.2-.8,2.6,1.7,2.7.8,0,1.7,0,1.7,1a2.1,2.1,0,0,1-1.4,2.2l-8.8,2.7-4.6,1.3a1.9,1.9,0,0,1-1.5-.2,3.2,3.2,0,0,1,.1-1.3C324.8,384.7,325,384.4,325.3,383.6Zm-10.1-9.9c-.1,3.6,1,5.8,2.9,6.6,3.5,1.5,9.1-.6,10.7-4,2.3-5,4.7-9.9,6.9-14.8a21.2,21.2,0,0,0,1.4-4,3.8,3.8,0,0,0-3.7-4.6,11.9,11.9,0,0,0-4.2.6,17.3,17.3,0,0,0-7.7,6.2C318.1,364.2,315.7,369.1,315.2,373.7Z" style="fill: #fff"/>
+    <path d="M271.2,354.8c.4-2,1.3-2.7,2.8-3,3.7-.9,7.3-2,10.9-3a2.7,2.7,0,0,1,1.8.1c.7.4.2,1.2-.1,1.8a8.5,8.5,0,0,0-.8,2.4l2.4-1.4c3.2-1.8,6.5-3.2,10.3-3.1s7,3,5.9,7.6a32.3,32.3,0,0,1-2.2,5.9c-2.5,5.6-5.1,11.1-7.7,16.6a6.1,6.1,0,0,0-.5,1.2c-.7,2.1-.4,2.5,1.7,2.8s1.6,1.1.8,1.9a3.4,3.4,0,0,1-2.3,1.3h-15c-.4,0-1.1-.3-1.2-.7a1.7,1.7,0,0,1,.3-1.4,3.3,3.3,0,0,1,2-1.1c2.5-.1,4-1.6,5-3.7,2.4-4.9,4.8-9.8,7.1-14.8.9-2.1,1.8-4.3,2.5-6.5s-.3-2.7-2.1-2.8a15.8,15.8,0,0,0-3.8.5,1.9,1.9,0,0,0-.8.3,11.8,11.8,0,0,0-7.1,6.9c-2.2,5.5-4.9,10.7-7.4,16.1a3.6,3.6,0,0,0-.4.9c-.9,2.1-.5,2.7,1.8,3,.5.1,1.3.6,1.3.9a2.1,2.1,0,0,1-.8,1.6,5.8,5.8,0,0,1-2.2.8H258.5c-.5,0-1.3-.4-1.3-.7a1.6,1.6,0,0,1,.5-1.6,2.8,2.8,0,0,1,1.9-.9,5.7,5.7,0,0,0,5-3.5c3.3-7.2,6.7-14.4,10.1-21.6.1-.2.1-.4.2-.6.6-1.8.3-2.1-1.5-2Z" style="fill: #fff"/>
+    <path d="M381.7,372.3a32.9,32.9,0,0,1-7.4,7.5,30,30,0,0,1-13.5,6.6,16,16,0,0,1-9.2-.5c-3.1-1.2-4.5-3.5-4.8-6.7s1-7.4,2.6-10.8c3.8-8.1,9.6-14.2,17.8-17.8a20,20,0,0,1,12-1.7c4.8.8,7.1,4.1,6.4,9a32,32,0,0,1-1,4.2c-.6,2-1.4,2.6-3.5,2.6H360.5a2.1,2.1,0,0,0-2.4,1.7,18.6,18.6,0,0,0-1.5,7.7,5.8,5.8,0,0,0,5.6,5.4,16.7,16.7,0,0,0,10.6-3c1.8-1.3,3.6-2.8,5.3-4.3s1.8-1.1,2.9-.3Zm-20.1-12.2h10.8c3.2,0,3.4-.1,3.4-3.4,0-.1.1-.3,0-.4a2.5,2.5,0,0,0-2.3-2.7C369,352.7,364.6,355.1,361.6,360.1Z" style="fill: #fff"/>
+    <path d="M407.2,352.8a76,76,0,0,1,7.6-3.7,9.9,9.9,0,0,1,4.2-.4,2.5,2.5,0,0,1,2.3,3.3,8,8,0,0,1-4.9,5.8,3.9,3.9,0,0,1-5-1.3c-.7-1-1.4-1.1-2.5-.5a13.7,13.7,0,0,0-6.4,6.8c-2.3,5.2-4.8,10.2-7.2,15.4l-.3.9c-.9,2.6-.5,3.2,2.3,3.6.8.1,1.9-.3,2.1,1.1s-1.3,2-2.3,2.2H379.4c-.8,0-1.4-.1-1.6-1s.8-2,1.4-2.2l3.3-.6a4.4,4.4,0,0,0,3.3-2.6l9.9-21.3c1.1-2.4.8-2.8-1.9-2.5-.9.1-2,.3-2-1a2.1,2.1,0,0,1,1.6-2.1l9.1-2.6,4.4-1.3a1.8,1.8,0,0,1,1.3.1c.3.3.2,1,.1,1.4S407.5,352.1,407.2,352.8Z" style="fill: #fff"/>
+    <path d="M337.6,276.6l-3.8,1.7a1.8,1.8,0,0,1-.8-.5l-3.9-6.5a1.6,1.6,0,0,1-.2-1l.3-.3,8.5,6.1Z" style="fill: none"/>
+    <path d="M315.2,373.7c.5-4.6,2.9-9.5,6.3-14a17.3,17.3,0,0,1,7.7-6.2,11.9,11.9,0,0,1,4.2-.6,3.8,3.8,0,0,1,3.7,4.6,21.2,21.2,0,0,1-1.4,4c-2.2,4.9-4.6,9.8-6.9,14.8-1.6,3.4-7.2,5.5-10.7,4C316.2,379.5,315.1,377.3,315.2,373.7Z" style="fill: none;stroke: #fff;stroke-miterlimit: 10"/>
+    <path d="M361.6,360.1c3-5,7.4-7.4,11.9-6.5a2.5,2.5,0,0,1,2.3,2.7c.1.1,0,.3,0,.4,0,3.3-.2,3.4-3.4,3.4Z" style="fill: none;stroke: #fff;stroke-miterlimit: 10"/>
+  </g>
+</svg>
diff --git a/resources/icons/bed/mini.svg b/resources/icons/bed/mini.svg
new file mode 100644
index 000000000..93c3437bd
--- /dev/null
+++ b/resources/icons/bed/mini.svg
@@ -0,0 +1,70 @@
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="180.5mm" height="180.6mm" viewBox="0 0 511.7 512">
+  <title>MINI_bed_texture</title>
+  <path d="M510.6,510.9" transform="translate(0.4 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <path d="M.4,510.9" transform="translate(0.4 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="511" y1="511.3" x2="511" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <path d="M.4.4" transform="translate(0.4 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <path d="M510.6.4" transform="translate(0.4 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="0.8" y1="0.8" x2="0.8" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="0.8" y1="511.3" x2="0.8" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="511" y1="0.8" x2="511" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="0.8" y1="511.3" x2="511" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="0.8" y1="0.8" x2="511" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <g>
+    <g>
+      <line x1="0.8" y1="383.6" x2="2.9" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="5" y1="383.6" x2="6.6" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5694814920425415,2.1355555057525635"/>
+      <line x1="7.7" y1="383.6" x2="507.8" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.271111011505127,2.1355555057525635,0.5694814920425415,2.1355555057525635"/>
+      <line x1="508.9" y1="383.6" x2="511" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+    </g>
+    <g>
+      <line x1="0.8" y1="256" x2="2.9" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="5" y1="256" x2="6.6" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5694814920425415,2.1355555057525635"/>
+      <line x1="7.7" y1="256" x2="507.8" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.271111011505127,2.1355555057525635,0.5694814920425415,2.1355555057525635"/>
+      <line x1="508.9" y1="256" x2="511" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+    </g>
+    <g>
+      <line x1="511" y1="128.4" x2="508.9" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="506.7" y1="128.4" x2="505.1" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5694814920425415,2.1355555057525635"/>
+      <line x1="504" y1="128.4" x2="3.9" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.271111011505127,2.1355555057525635,0.5694814920425415,2.1355555057525635"/>
+      <line x1="2.9" y1="128.4" x2="0.8" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+    </g>
+    <g>
+      <line x1="128.3" y1="511.3" x2="128.3" y2="509.1" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="128.3" y1="507" x2="128.3" y2="505.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.569789707660675,2.1367111206054688"/>
+      <line x1="128.3" y1="504.3" x2="128.3" y2="3.9" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.2734222412109375,2.1367111206054688,0.569789707660675,2.1367111206054688"/>
+      <line x1="128.3" y1="2.9" x2="128.3" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+    </g>
+    <g>
+      <line x1="255.9" y1="0.8" x2="255.9" y2="2.9" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="255.9" y1="5" x2="255.9" y2="6.7" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.569789707660675,2.1367111206054688"/>
+      <line x1="255.9" y1="7.7" x2="255.9" y2="508.1" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.2734222412109375,2.1367111206054688,0.569789707660675,2.1367111206054688"/>
+      <line x1="255.9" y1="509.1" x2="255.9" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+    </g>
+    <g>
+      <line x1="383.4" y1="484.8" x2="383.4" y2="482.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="383.4" y1="480.5" x2="383.4" y2="478.9" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5708136558532715,2.1405510902404785"/>
+      <line x1="383.4" y1="477.8" x2="383.4" y2="3.9" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.281102180480957,2.1405510902404785,0.5708136558532715,2.1405510902404785"/>
+      <line x1="383.4" y1="2.9" x2="383.4" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+    </g>
+  </g>
+  <g>
+    <path d="M277.3,489.1c4.6,0,7.4,2.8,7.4,8.1s-2.9,8.1-7.4,8.1-7.4-2.9-7.4-8.1S272.9,489.1,277.3,489.1Zm3.7,8.1c0-3.8-1.5-5.7-3.7-5.7s-3.8,1.9-3.8,5.7,1.3,5.6,3.8,5.6S281,500.9,281,497.2Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M293.1,499h-2.5v6h-3.3V489.3h6.1a7.3,7.3,0,0,1,3.2.6,4.1,4.1,0,0,1,2.6,4,4.4,4.4,0,0,1-3.1,4.3h0l3.5,6.8H296Zm-.1-2.4c1.5,0,2.7-.7,2.7-2.5a2.4,2.4,0,0,0-2.7-2.5h-2.4v5Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M302,489.3h3.4V505H302Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M311.6,497.2c0,4,1.4,5.6,3.8,5.6s3.4-1.3,3.6-3.5V499h-3.7v-2.4h6.8V505h-2.6v-2.2h-.1a5,5,0,0,1-4.6,2.5c-4.4,0-6.8-3.1-6.8-7.9s3-8.3,7.4-8.3,6.1,1.7,6.4,4.9h-3.4a2.8,2.8,0,0,0-3-2.5C313,491.5,311.6,493.5,311.6,497.2Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M325.1,489.3h3.4V505h-3.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M331.7,489.3h3.7l5,8.5a16.8,16.8,0,0,1,1.2,2.3h0V489.3h3.1V505h-3.5l-5.3-8.7a12.8,12.8,0,0,1-1.1-2.4h-.1V505h-3Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M356.8,501.5H351l-1.1,3.5h-3.2l5.4-15.7h3.8l5.6,15.7h-3.6Zm-3.5-7.1-1.5,4.6H356l-1.5-4.5c-.4-1.4-.6-2.3-.6-2.3h0A15.3,15.3,0,0,1,353.3,494.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M363.4,489.3h3.4v13h6.8V505H363.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M384,499.6V505h-3.4V489.3h5.5c3.4,0,6,1.4,6,5s-2.8,5.3-6.3,5.3Zm2-2.5a2.5,2.5,0,0,0,2.8-2.7c0-1.9-1.1-2.7-2.8-2.7h-2v5.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>+    <path d="M400.1,499h-2.4v6h-3.4V489.3h6.1a7.3,7.3,0,0,1,3.2.6,3.9,3.9,0,0,1,2.6,4,4.5,4.5,0,0,1-3,4.3h0l3.5,6.8H403Zm-.1-2.4c1.5,0,2.8-.7,2.8-2.5a2.4,2.4,0,0,0-2.7-2.5h-2.4v5Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M408.7,489.3H412v9.1a5.6,5.6,0,0,0,.6,3.2,3.6,3.6,0,0,0,5,0c.6-.8.5-2.1.5-3.2v-9.1h3.3v10.2c0,3.9-2.5,5.8-6.4,5.8s-6.3-1.8-6.3-5.8Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M432.4,493.5a2,2,0,0,0-2.3-2c-1.5,0-2.4.8-2.4,1.9s.6,1.7,2.1,1.9l2.4.5c2.8.5,4.1,2,4.1,4.3s-2.3,5.2-6.3,5.2-6.1-1.9-6.2-4.8h3.5a2.5,2.5,0,0,0,2.8,2.3c1.9,0,2.7-.9,2.7-2.1s-.5-1.7-2.2-2l-2.3-.4c-2.4-.5-4.1-1.9-4.1-4.4s2.2-4.8,5.9-4.8,5.7,2,5.8,4.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M447.4,501.5h-5.7l-1.2,3.5h-3.2l5.5-15.7h3.7l5.6,15.7h-3.5Zm-3.5-7.1-1.4,4.6h4.1l-1.4-4.5a11.3,11.3,0,0,1-.6-2.3h-.1A15.3,15.3,0,0,1,443.9,494.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M458.7,489.3h4.9l2.8,8.4a15.7,15.7,0,0,1,.7,2.3h0l.7-2.3,2.8-8.4h4.9V505h-3.3V492.7h-.1a26.9,26.9,0,0,1-1,3.3l-2.9,9h-2.5l-2.9-9a26.9,26.9,0,0,1-1-3.3h0V505h-3.1Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M478.6,489.3H482V505h-3.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M485.2,489.3h3.7l5,8.5a16.8,16.8,0,0,1,1.2,2.3h0V489.3h3.1V505h-3.5l-5.3-8.7a12.8,12.8,0,0,1-1.1-2.4h-.1V505h-3Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M501.3,489.3h3.4V505h-3.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+  </g>
+</svg>
diff --git a/resources/models/ender3_bed.stl b/resources/models/ender3_bed.stl
new file mode 100644
index 0000000000000000000000000000000000000000..fb8f86d094e6cc1adf87808aefa292fb217000ea
GIT binary patch
literal 50484
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
AXaE2J

literal 0
HcmV?d00001

diff --git a/resources/models/mini_bed.stl b/resources/models/mini_bed.stl
new file mode 100644
index 0000000000000000000000000000000000000000..a189f851fb8189fc313fc71470ae4108009d113d
GIT binary patch
literal 648084
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

literal 0
HcmV?d00001

diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp
index 82b512270..d0bab50c6 100644
--- a/src/slic3r/GUI/3DBed.cpp
+++ b/src/slic3r/GUI/3DBed.cpp
@@ -272,27 +272,13 @@ void Bed3D::render(GLCanvas3D& canvas, float theta, float scale_factor) const
 
     switch (m_type)
     {
-    case MK2:
-    {
-        render_prusa(canvas, "mk2", theta > 90.0f);
-        break;
-    }
-    case MK3:
-    {
-        render_prusa(canvas, "mk3", theta > 90.0f);
-        break;
-    }
-    case SL1:
-    {
-        render_prusa(canvas, "sl1", theta > 90.0f);
-        break;
-    }
+    case MK2: { render_prusa(canvas, "mk2", theta > 90.0f); break; }
+    case MK3: { render_prusa(canvas, "mk3", theta > 90.0f); break; }
+    case SL1: { render_prusa(canvas, "sl1", theta > 90.0f); break; }
+    case MINI: { render_prusa(canvas, "mini", theta > 90.0f); break; }
+    case ENDER3: { render_prusa(canvas, "ender3", theta > 90.0f); break; }
     default:
-    case Custom:
-    {
-        render_custom(canvas, theta > 90.0f);
-        break;
-    }
+    case Custom: { render_custom(canvas, theta > 90.0f); break; }
     }
 }
 
@@ -364,22 +350,38 @@ Bed3D::EType Bed3D::detect_type(const Pointfs& shape) const
         {
             if (curr->config.has("bed_shape"))
             {
-                if ((curr->vendor != nullptr) && (curr->vendor->name == "Prusa Research") && (shape == dynamic_cast<const ConfigOptionPoints*>(curr->config.option("bed_shape"))->values))
+                if (curr->vendor != nullptr)
                 {
-                    if (boost::contains(curr->name, "SL1"))
+                    if ((curr->vendor->name == "Prusa Research") && (shape == dynamic_cast<const ConfigOptionPoints*>(curr->config.option("bed_shape"))->values))
                     {
-                        type = SL1;
-                        break;
+                        if (boost::contains(curr->name, "SL1"))
+                        {
+                            type = SL1;
+                            break;
+                        }
+                        else if (boost::contains(curr->name, "MK3") || boost::contains(curr->name, "MK2.5"))
+                        {
+                            type = MK3;
+                            break;
+                        }
+                        else if (boost::contains(curr->name, "MK2"))
+                        {
+                            type = MK2;
+                            break;
+                        }
+                        else if (boost::contains(curr->name, "MINI"))
+                        {
+                            type = MINI;
+                            break;
+                        }
                     }
-                    else if (boost::contains(curr->name, "MK3") || boost::contains(curr->name, "MK2.5"))
+                    else if ((curr->vendor->name == "Creality") && (shape == dynamic_cast<const ConfigOptionPoints*>(curr->config.option("bed_shape"))->values))
                     {
-                        type = MK3;
-                        break;
-                    }
-                    else if (boost::contains(curr->name, "MK2"))
-                    {
-                        type = MK2;
-                        break;
+                        if (boost::contains(curr->name, "ENDER-3"))
+                        {
+                            type = ENDER3;
+                            break;
+                        }
                     }
                 }
             }
diff --git a/src/slic3r/GUI/3DBed.hpp b/src/slic3r/GUI/3DBed.hpp
index c9a30e6ec..132836711 100644
--- a/src/slic3r/GUI/3DBed.hpp
+++ b/src/slic3r/GUI/3DBed.hpp
@@ -67,6 +67,8 @@ public:
         MK2,
         MK3,
         SL1,
+        MINI,
+        ENDER3,
         Custom,
         Num_Types
     };

From 32d794756ee2e7d43bafd07180e3e6f05e000265 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 15 Nov 2019 10:05:56 +0100
Subject: [PATCH 82/84] Lighter model for mini printer printbed

---
 resources/models/mini_bed.stl | Bin 648084 -> 57884 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/resources/models/mini_bed.stl b/resources/models/mini_bed.stl
index a189f851fb8189fc313fc71470ae4108009d113d..2f4c45b7b150b7883c038f2104c53e8aa35fe812 100644
GIT binary patch
literal 57884
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
HGx7fbmrcb#

literal 648084
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


From ac628c8069779ce029529ef037eb1c4a7e5f0770 Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 15 Nov 2019 11:53:16 +0100
Subject: [PATCH 83/84] New texture for mini printer printbed

---
 resources/icons/bed/mini.svg | 145 ++++++++++++++++++++++-------------
 1 file changed, 92 insertions(+), 53 deletions(-)

diff --git a/resources/icons/bed/mini.svg b/resources/icons/bed/mini.svg
index 93c3437bd..1b9476ef8 100644
--- a/resources/icons/bed/mini.svg
+++ b/resources/icons/bed/mini.svg
@@ -1,70 +1,109 @@
-<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="180.5mm" height="180.6mm" viewBox="0 0 511.7 512">
-  <title>MINI_bed_texture</title>
-  <path d="M510.6,510.9" transform="translate(0.4 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
-  <path d="M.4,510.9" transform="translate(0.4 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
-  <line x1="511" y1="511.3" x2="511" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
-  <path d="M.4.4" transform="translate(0.4 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
-  <path d="M510.6.4" transform="translate(0.4 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
-  <line x1="0.8" y1="0.8" x2="0.8" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
-  <line x1="0.8" y1="511.3" x2="0.8" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
-  <line x1="511" y1="0.8" x2="511" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
-  <line x1="0.8" y1="511.3" x2="511" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
-  <line x1="0.8" y1="0.8" x2="511" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="180.7mm" height="180.6mm" viewBox="0 0 512.1 512">
+  <title>bed_texture_denser</title>
+  <path d="M510.6,510.9" transform="translate(0.7 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <path d="M.4,510.9" transform="translate(0.7 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="511.3" y1="511.3" x2="511.3" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <path d="M.4.4" transform="translate(0.7 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <path d="M510.6.4" transform="translate(0.7 0.4)" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="1.1" y1="0.8" x2="1.1" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="1.1" y1="511.3" x2="1.1" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="511.3" y1="0.8" x2="511.3" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="1.1" y1="511.3" x2="511.3" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
+  <line x1="1.1" y1="0.8" x2="511.3" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-width: 1.5px"/>
   <g>
     <g>
-      <line x1="0.8" y1="383.6" x2="2.9" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
-      <line x1="5" y1="383.6" x2="6.6" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5694814920425415,2.1355555057525635"/>
-      <line x1="7.7" y1="383.6" x2="507.8" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.271111011505127,2.1355555057525635,0.5694814920425415,2.1355555057525635"/>
-      <line x1="508.9" y1="383.6" x2="511" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="1.1" y1="383.6" x2="3.2" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="5.4" y1="383.6" x2="7" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5694814920425415,2.1355555057525635"/>
+      <line x1="8.1" y1="383.6" x2="508.1" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.271111011505127,2.1355555057525635,0.5694814920425415,2.1355555057525635"/>
+      <line x1="509.2" y1="383.6" x2="511.3" y2="383.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
     </g>
     <g>
-      <line x1="0.8" y1="256" x2="2.9" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
-      <line x1="5" y1="256" x2="6.6" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5694814920425415,2.1355555057525635"/>
-      <line x1="7.7" y1="256" x2="507.8" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.271111011505127,2.1355555057525635,0.5694814920425415,2.1355555057525635"/>
-      <line x1="508.9" y1="256" x2="511" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="1.1" y1="256" x2="3.2" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="5.4" y1="256" x2="7" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5694814920425415,2.1355555057525635"/>
+      <line x1="8.1" y1="256" x2="508.1" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.271111011505127,2.1355555057525635,0.5694814920425415,2.1355555057525635"/>
+      <line x1="509.2" y1="256" x2="511.3" y2="256" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
     </g>
     <g>
-      <line x1="511" y1="128.4" x2="508.9" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
-      <line x1="506.7" y1="128.4" x2="505.1" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5694814920425415,2.1355555057525635"/>
-      <line x1="504" y1="128.4" x2="3.9" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.271111011505127,2.1355555057525635,0.5694814920425415,2.1355555057525635"/>
-      <line x1="2.9" y1="128.4" x2="0.8" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="511.3" y1="128.4" x2="509.2" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="507.1" y1="128.4" x2="505.4" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5694814920425415,2.1355555057525635"/>
+      <line x1="504.4" y1="128.4" x2="4.3" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.271111011505127,2.1355555057525635,0.5694814920425415,2.1355555057525635"/>
+      <line x1="3.2" y1="128.4" x2="1.1" y2="128.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
     </g>
     <g>
-      <line x1="128.3" y1="511.3" x2="128.3" y2="509.1" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
-      <line x1="128.3" y1="507" x2="128.3" y2="505.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.569789707660675,2.1367111206054688"/>
-      <line x1="128.3" y1="504.3" x2="128.3" y2="3.9" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.2734222412109375,2.1367111206054688,0.569789707660675,2.1367111206054688"/>
-      <line x1="128.3" y1="2.9" x2="128.3" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="128.7" y1="511.3" x2="128.7" y2="509.1" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="128.7" y1="507" x2="128.7" y2="505.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.569789707660675,2.1367111206054688"/>
+      <line x1="128.7" y1="504.3" x2="128.7" y2="3.9" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.2734222412109375,2.1367111206054688,0.569789707660675,2.1367111206054688"/>
+      <line x1="128.7" y1="2.9" x2="128.7" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
     </g>
     <g>
-      <line x1="255.9" y1="0.8" x2="255.9" y2="2.9" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
-      <line x1="255.9" y1="5" x2="255.9" y2="6.7" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.569789707660675,2.1367111206054688"/>
-      <line x1="255.9" y1="7.7" x2="255.9" y2="508.1" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.2734222412109375,2.1367111206054688,0.569789707660675,2.1367111206054688"/>
-      <line x1="255.9" y1="509.1" x2="255.9" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="256.2" y1="0.8" x2="256.2" y2="2.9" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="256.2" y1="5" x2="256.2" y2="6.7" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.569789707660675,2.1367111206054688"/>
+      <line x1="256.2" y1="7.7" x2="256.2" y2="508.1" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.2734222412109375,2.1367111206054688,0.569789707660675,2.1367111206054688"/>
+      <line x1="256.2" y1="509.1" x2="256.2" y2="511.3" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
     </g>
     <g>
-      <line x1="383.4" y1="484.8" x2="383.4" y2="482.6" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
-      <line x1="383.4" y1="480.5" x2="383.4" y2="478.9" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5708136558532715,2.1405510902404785"/>
-      <line x1="383.4" y1="477.8" x2="383.4" y2="3.9" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.281102180480957,2.1405510902404785,0.5708136558532715,2.1405510902404785"/>
-      <line x1="383.4" y1="2.9" x2="383.4" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="383.8" y1="482.3" x2="383.8" y2="480.2" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
+      <line x1="383.8" y1="478" x2="383.8" y2="476.4" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 0.5678567290306091,2.129462480545044"/>
+      <line x1="383.8" y1="475.3" x2="383.8" y2="3.9" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round;stroke-dasharray: 4.258924961090088,2.129462480545044,0.5678567290306091,2.129462480545044"/>
+      <line x1="383.8" y1="2.9" x2="383.8" y2="0.8" style="fill: none;stroke: #fff;stroke-linecap: round;stroke-linejoin: round"/>
     </g>
   </g>
   <g>
-    <path d="M277.3,489.1c4.6,0,7.4,2.8,7.4,8.1s-2.9,8.1-7.4,8.1-7.4-2.9-7.4-8.1S272.9,489.1,277.3,489.1Zm3.7,8.1c0-3.8-1.5-5.7-3.7-5.7s-3.8,1.9-3.8,5.7,1.3,5.6,3.8,5.6S281,500.9,281,497.2Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M293.1,499h-2.5v6h-3.3V489.3h6.1a7.3,7.3,0,0,1,3.2.6,4.1,4.1,0,0,1,2.6,4,4.4,4.4,0,0,1-3.1,4.3h0l3.5,6.8H296Zm-.1-2.4c1.5,0,2.7-.7,2.7-2.5a2.4,2.4,0,0,0-2.7-2.5h-2.4v5Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M302,489.3h3.4V505H302Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M311.6,497.2c0,4,1.4,5.6,3.8,5.6s3.4-1.3,3.6-3.5V499h-3.7v-2.4h6.8V505h-2.6v-2.2h-.1a5,5,0,0,1-4.6,2.5c-4.4,0-6.8-3.1-6.8-7.9s3-8.3,7.4-8.3,6.1,1.7,6.4,4.9h-3.4a2.8,2.8,0,0,0-3-2.5C313,491.5,311.6,493.5,311.6,497.2Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M325.1,489.3h3.4V505h-3.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M331.7,489.3h3.7l5,8.5a16.8,16.8,0,0,1,1.2,2.3h0V489.3h3.1V505h-3.5l-5.3-8.7a12.8,12.8,0,0,1-1.1-2.4h-.1V505h-3Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M356.8,501.5H351l-1.1,3.5h-3.2l5.4-15.7h3.8l5.6,15.7h-3.6Zm-3.5-7.1-1.5,4.6H356l-1.5-4.5c-.4-1.4-.6-2.3-.6-2.3h0A15.3,15.3,0,0,1,353.3,494.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M363.4,489.3h3.4v13h6.8V505H363.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M384,499.6V505h-3.4V489.3h5.5c3.4,0,6,1.4,6,5s-2.8,5.3-6.3,5.3Zm2-2.5a2.5,2.5,0,0,0,2.8-2.7c0-1.9-1.1-2.7-2.8-2.7h-2v5.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M400.1,499h-2.4v6h-3.4V489.3h6.1a7.3,7.3,0,0,1,3.2.6,3.9,3.9,0,0,1,2.6,4,4.5,4.5,0,0,1-3,4.3h0l3.5,6.8H403Zm-.1-2.4c1.5,0,2.8-.7,2.8-2.5a2.4,2.4,0,0,0-2.7-2.5h-2.4v5Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M408.7,489.3H412v9.1a5.6,5.6,0,0,0,.6,3.2,3.6,3.6,0,0,0,5,0c.6-.8.5-2.1.5-3.2v-9.1h3.3v10.2c0,3.9-2.5,5.8-6.4,5.8s-6.3-1.8-6.3-5.8Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M432.4,493.5a2,2,0,0,0-2.3-2c-1.5,0-2.4.8-2.4,1.9s.6,1.7,2.1,1.9l2.4.5c2.8.5,4.1,2,4.1,4.3s-2.3,5.2-6.3,5.2-6.1-1.9-6.2-4.8h3.5a2.5,2.5,0,0,0,2.8,2.3c1.9,0,2.7-.9,2.7-2.1s-.5-1.7-2.2-2l-2.3-.4c-2.4-.5-4.1-1.9-4.1-4.4s2.2-4.8,5.9-4.8,5.7,2,5.8,4.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M447.4,501.5h-5.7l-1.2,3.5h-3.2l5.5-15.7h3.7l5.6,15.7h-3.5Zm-3.5-7.1-1.4,4.6h4.1l-1.4-4.5a11.3,11.3,0,0,1-.6-2.3h-.1A15.3,15.3,0,0,1,443.9,494.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M458.7,489.3h4.9l2.8,8.4a15.7,15.7,0,0,1,.7,2.3h0l.7-2.3,2.8-8.4h4.9V505h-3.3V492.7h-.1a26.9,26.9,0,0,1-1,3.3l-2.9,9h-2.5l-2.9-9a26.9,26.9,0,0,1-1-3.3h0V505h-3.1Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M478.6,489.3H482V505h-3.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M485.2,489.3h3.7l5,8.5a16.8,16.8,0,0,1,1.2,2.3h0V489.3h3.1V505h-3.5l-5.3-8.7a12.8,12.8,0,0,1-1.1-2.4h-.1V505h-3Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
-    <path d="M501.3,489.3h3.4V505h-3.4Z" transform="translate(0.4 0.4)" style="fill: #fff"/>
+    <path d="M277.3,489.1c4.6,0,7.4,2.8,7.4,8.1s-2.9,8.1-7.4,8.1-7.4-2.9-7.4-8.1S272.9,489.1,277.3,489.1Zm3.7,8.1c0-3.8-1.5-5.7-3.7-5.7s-3.8,1.9-3.8,5.7,1.3,5.6,3.8,5.6S281,500.9,281,497.2Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M293.1,499h-2.5v6h-3.3V489.3h6.1a7.3,7.3,0,0,1,3.2.6,4.1,4.1,0,0,1,2.6,4,4.4,4.4,0,0,1-3.1,4.3h0l3.5,6.8H296Zm-.1-2.4c1.5,0,2.7-.7,2.7-2.5a2.4,2.4,0,0,0-2.7-2.5h-2.4v5Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M302,489.3h3.4V505H302Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M311.6,497.2c0,4,1.4,5.6,3.8,5.6s3.4-1.3,3.6-3.5V499h-3.7v-2.4h6.8V505h-2.6v-2.2h-.1a5,5,0,0,1-4.6,2.5c-4.4,0-6.8-3.1-6.8-7.9s3-8.3,7.4-8.3,6.1,1.7,6.4,4.9h-3.4a2.8,2.8,0,0,0-3-2.5C313,491.5,311.6,493.5,311.6,497.2Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M325.1,489.3h3.4V505h-3.4Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M331.7,489.3h3.7l5,8.5a16.8,16.8,0,0,1,1.2,2.3h0V489.3h3.1V505h-3.5l-5.3-8.7a12.8,12.8,0,0,1-1.1-2.4h-.1V505h-3Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M356.8,501.5H351l-1.1,3.5h-3.2l5.4-15.7h3.8l5.6,15.7h-3.6Zm-3.5-7.1-1.5,4.6H356l-1.5-4.5c-.4-1.4-.6-2.3-.6-2.3h0A15.3,15.3,0,0,1,353.3,494.4Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M363.4,489.3h3.4v13h6.8V505H363.4Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M384,499.6V505h-3.4V489.3h5.5c3.4,0,6,1.4,6,5s-2.8,5.3-6.3,5.3Zm2-2.5a2.5,2.5,0,0,0,2.8-2.7c0-1.9-1.1-2.7-2.8-2.7h-2v5.4Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M400.1,499h-2.4v6h-3.4V489.3h6.1a7.3,7.3,0,0,1,3.2.6,3.9,3.9,0,0,1,2.6,4,4.5,4.5,0,0,1-3,4.3h0l3.5,6.8H403Zm-.1-2.4c1.5,0,2.8-.7,2.8-2.5a2.4,2.4,0,0,0-2.7-2.5h-2.4v5Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M408.7,489.3H412v9.1a5.6,5.6,0,0,0,.6,3.2,3.6,3.6,0,0,0,5,0c.6-.8.5-2.1.5-3.2v-9.1h3.3v10.2c0,3.9-2.5,5.8-6.4,5.8s-6.3-1.8-6.3-5.8Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M432.4,493.5a2,2,0,0,0-2.3-2c-1.5,0-2.4.8-2.4,1.9s.6,1.7,2.1,1.9l2.4.5c2.8.5,4.1,2,4.1,4.3s-2.3,5.2-6.3,5.2-6.1-1.9-6.2-4.8h3.5a2.5,2.5,0,0,0,2.8,2.3c1.9,0,2.7-.9,2.7-2.1s-.5-1.7-2.2-2l-2.3-.4c-2.4-.5-4.1-1.9-4.1-4.4s2.2-4.8,5.9-4.8,5.7,2,5.8,4.4Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M447.4,501.5h-5.7l-1.2,3.5h-3.2l5.5-15.7h3.7l5.6,15.7h-3.5Zm-3.5-7.1-1.4,4.6h4.1l-1.4-4.5a11.3,11.3,0,0,1-.6-2.3h-.1A15.3,15.3,0,0,1,443.9,494.4Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M458.7,489.3h4.9l2.8,8.4a15.7,15.7,0,0,1,.7,2.3h0l.7-2.3,2.8-8.4h4.9V505h-3.3V492.7h-.1a26.9,26.9,0,0,1-1,3.3l-2.9,9h-2.5l-2.9-9a26.9,26.9,0,0,1-1-3.3h0V505h-3.1Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M478.6,489.3H482V505h-3.4Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M485.2,489.3h3.7l5,8.5a16.8,16.8,0,0,1,1.2,2.3h0V489.3h3.1V505h-3.5l-5.3-8.7a12.8,12.8,0,0,1-1.1-2.4h-.1V505h-3Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
+    <path d="M501.3,489.3h3.4V505h-3.4Z" transform="translate(0.7 0.4)" style="fill: #fff"/>
   </g>
+  <line x1="0.4" y1="28.7" x2="511" y2="28.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.4" y1="57.1" x2="511" y2="57.1" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.4" y1="28.7" x2="511" y2="28.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.1" y1="85.4" x2="510.7" y2="85.4" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.1" y1="113.8" x2="510.7" y2="113.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.9" y1="142.1" x2="511.5" y2="142.1" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <path d="M509.9,141.7" transform="translate(0.7 0.4)" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <path d="M-.7,141.7" transform="translate(0.7 0.4)" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="1.5" y1="198.8" x2="512.1" y2="198.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line y1="170.5" x2="510.6" y2="170.5" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.5" y1="227.2" x2="511.1" y2="227.2" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.6" y1="283.9" x2="511.2" y2="283.9" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.5" y1="28.7" x2="511.1" y2="28.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.6" y1="312.2" x2="511.2" y2="312.2" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.6" y1="340.6" x2="511.2" y2="340.6" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.6" y1="368.9" x2="511.2" y2="368.9" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.6" y1="397.2" x2="511.2" y2="397.2" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.6" y1="425.6" x2="511.2" y2="425.6" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.6" y1="453.9" x2="511.2" y2="453.9" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="0.6" y1="482.3" x2="511.2" y2="482.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <path d="M481.9,511.4" transform="translate(0.7 0.4)" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <path d="M481.9.8" transform="translate(0.7 0.4)" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="454.3" y1="1.2" x2="454.3" y2="482.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="482.6" y1="1.2" x2="482.6" y2="482.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="425.9" y1="0.8" x2="425.9" y2="482.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="397.6" y1="0.8" x2="397.6" y2="482.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="369.2" y1="1.7" x2="369.2" y2="482.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="312.6" y1="2.2" x2="312.6" y2="482.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="340.9" y1="0.8" x2="340.9" y2="482.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="284.2" y1="1.3" x2="284.2" y2="482.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="227.5" y1="1.3" x2="227.5" y2="511.9" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="482.6" y1="1.3" x2="482.6" y2="482.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="199.2" y1="1.3" x2="199.2" y2="511.9" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="170.8" y1="1.3" x2="170.8" y2="511.9" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="142.5" y1="1.3" x2="142.5" y2="511.9" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="114.1" y1="1.3" x2="114.1" y2="511.9" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="85.8" y1="1.3" x2="85.8" y2="511.9" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="57.4" y1="1.3" x2="57.4" y2="511.9" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
+  <line x1="29.1" y1="1.3" x2="29.1" y2="511.9" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.25px"/>
 </svg>

From fe4b65e3056f078eaffb524cf5632f299242508d Mon Sep 17 00:00:00 2001
From: bubnikv <bubnikv@gmail.com>
Date: Fri, 15 Nov 2019 16:20:01 +0100
Subject: [PATCH 84/84] Improvement of the Elephant foot compensation: Using a
 positive curvature estimate to control the strength of the Elephant foot
 compensation shall work similarly to the previous implementation while
 avoiding pinching off tiny pieces from the contour.

---
 src/libslic3r/EdgeGrid.hpp                    |  19 ++
 src/libslic3r/ElephantFootCompensation.cpp    | 248 +++++++++++++++---
 src/libslic3r/Utils.hpp                       |  59 +++++
 .../test_elephant_foot_compensation.cpp       | 209 +++++++++++++++
 4 files changed, 497 insertions(+), 38 deletions(-)

diff --git a/src/libslic3r/EdgeGrid.hpp b/src/libslic3r/EdgeGrid.hpp
index 1a51f3439..81517a5c4 100644
--- a/src/libslic3r/EdgeGrid.hpp
+++ b/src/libslic3r/EdgeGrid.hpp
@@ -209,6 +209,25 @@ public:
 		}
 	}
 
+	template<typename VISITOR> void visit_cells_intersecting_box(BoundingBox bbox, VISITOR &visitor) const
+	{
+		// End points of the line segment.
+		bbox.min -= m_bbox.min;
+		bbox.max -= m_bbox.min + Point(1, 1);
+		// Get the cells of the end points.
+		bbox.min /= m_resolution;
+		bbox.max /= m_resolution;
+		// Trim with the cells.
+		bbox.min.x() = std::max(bbox.min.x(), 0);
+		bbox.min.y() = std::max(bbox.min.y(), 0);
+		bbox.max.x() = std::min(bbox.max.x(), (coord_t)m_cols - 1);
+		bbox.max.y() = std::min(bbox.max.y(), (coord_t)m_rows - 1);
+		for (coord_t iy = bbox.min.y(); iy <= bbox.max.y(); ++ iy)
+			for (coord_t ix = bbox.min.x(); ix <= bbox.max.x(); ++ ix)
+				if (! visitor(iy, ix))
+					return;
+	}
+
 	std::pair<std::vector<std::pair<size_t, size_t>>::const_iterator, std::vector<std::pair<size_t, size_t>>::const_iterator> cell_data_range(coord_t row, coord_t col) const
 	{
 		const EdgeGrid::Grid::Cell &cell = m_cells[row * m_cols + col];
diff --git a/src/libslic3r/ElephantFootCompensation.cpp b/src/libslic3r/ElephantFootCompensation.cpp
index 828064c32..69a20b5ec 100644
--- a/src/libslic3r/ElephantFootCompensation.cpp
+++ b/src/libslic3r/ElephantFootCompensation.cpp
@@ -8,6 +8,7 @@
 #include "Flow.hpp"
 #include "Geometry.hpp"
 #include "SVG.hpp"
+#include "Utils.hpp"
 
 #include <cmath>
 #include <cassert>
@@ -26,6 +27,10 @@ struct ResampledPoint {
 	double		curve_parameter;
 };
 
+// Distance calculated using SDF (Shape Diameter Function).
+// The distance is calculated by casting a fan of rays and measuring the intersection distance.
+// Thus the calculation is relatively slow. For the Elephant foot compensation purpose, this distance metric does not avoid 
+// pinching off small pieces of a contour, thus this function has been superseded by contour_distance2().
 std::vector<float> contour_distance(const EdgeGrid::Grid &grid, const size_t idx_contour, const Slic3r::Points &contour, const std::vector<ResampledPoint> &resampled_point_parameters, double search_radius)
 {
 	assert(! contour.empty());
@@ -167,7 +172,7 @@ std::vector<float> contour_distance(const EdgeGrid::Grid &grid, const size_t idx
 			SVG svg(debug_out_path("contour_distance_raycasted-%d-%d.svg", iRun, &pt_next - contour.data()).c_str(), bbox);
 			svg.draw(expoly_grid);
 			svg.draw_outline(Polygon(contour), "blue", scale_(0.01));
-			svg.draw(*pt_this, "red", scale_(0.1));
+			svg.draw(*pt_this, "red", coord_t(scale_(0.1)));
 #endif /* CONTOUR_DISTANCE_DEBUG_SVG */
 
 			for (int i = - num_rays + 1; i < num_rays; ++ i) {
@@ -182,7 +187,7 @@ std::vector<float> contour_distance(const EdgeGrid::Grid &grid, const size_t idx
 				svg.draw(Line(visitor.pt_start, visitor.pt_end), "yellow", scale_(0.01));
 				if (visitor.t_min < 1.) {
 					Vec2d pt = visitor.pt + visitor.dir * visitor.t_min;
-					svg.draw(Point(pt), "red", scale_(0.1));
+					svg.draw(Point(pt), "red", coord_t(scale_(0.1)));
 				}
 #endif /* CONTOUR_DISTANCE_DEBUG_SVG */
 			}
@@ -209,7 +214,7 @@ std::vector<float> contour_distance(const EdgeGrid::Grid &grid, const size_t idx
 			out.emplace_back(float(distances.front() * search_radius));
 #endif
 #ifdef CONTOUR_DISTANCE_DEBUG_SVG
-			printf("contour_distance_raycasted-%d-%d.svg - distance %lf\n", iRun, &pt_next - contour.data(), unscale<double>(out.back()));
+			printf("contour_distance_raycasted-%d-%d.svg - distance %lf\n", iRun, int(&pt_next - contour.data()), unscale<double>(out.back()));
 #endif /* CONTOUR_DISTANCE_DEBUG_SVG */
 			pt_this = &pt_next;
 			idx_pt_this = &pt_next - contour.data();
@@ -223,6 +228,188 @@ std::vector<float> contour_distance(const EdgeGrid::Grid &grid, const size_t idx
 	return out;
 }
 
+// Contour distance by measuring the closest point of an ExPolygon stored inside the EdgeGrid, while filtering out points of the same contour
+// at concave regions, or convex regions with low curvature (curvature is estimated as a ratio between contour length and chordal distance crossing the contour ends).
+std::vector<float> contour_distance2(const EdgeGrid::Grid &grid, const size_t idx_contour, const Slic3r::Points &contour, const std::vector<ResampledPoint> &resampled_point_parameters, double compensation, double search_radius)
+{
+	assert(! contour.empty());
+	assert(contour.size() >= 2);
+
+	std::vector<float> out;
+
+	if (contour.size() > 2) 
+	{
+#ifdef CONTOUR_DISTANCE_DEBUG_SVG
+		static int iRun = 0;
+		++ iRun;
+		BoundingBox bbox = get_extents(contour);
+		bbox.merge(grid.bbox());
+		ExPolygon expoly_grid;
+		expoly_grid.contour = Polygon(*grid.contours().front());
+		for (size_t i = 1; i < grid.contours().size(); ++ i)
+			expoly_grid.holes.emplace_back(Polygon(*grid.contours()[i]));
+#endif
+		struct Visitor {
+			Visitor(const EdgeGrid::Grid &grid, const size_t idx_contour, const std::vector<ResampledPoint> &resampled_point_parameters, double dist_same_contour_accept, double dist_same_contour_reject) :
+				grid(grid), idx_contour(idx_contour), contour(*grid.contours()[idx_contour]), resampled_point_parameters(resampled_point_parameters), dist_same_contour_accept(dist_same_contour_accept), dist_same_contour_reject(dist_same_contour_reject) {}
+
+			void init(const Points &contour, const Point &apoint) {
+				this->idx_point = &apoint - contour.data();
+				this->point 	= apoint;
+				this->found     = false;
+				this->dir_inside = this->dir_inside_at_point(contour, this->idx_point);
+			}
+
+			bool operator()(coord_t iy, coord_t ix) {
+				// Called with a row and colum of the grid cell, which is intersected by a line.
+				auto cell_data_range = this->grid.cell_data_range(iy, ix);
+				for (auto it_contour_and_segment = cell_data_range.first; it_contour_and_segment != cell_data_range.second; ++ it_contour_and_segment) {
+					// End points of the line segment and their vector.
+					std::pair<const Point&, const Point&> segment = this->grid.segment(*it_contour_and_segment);
+				    const Vec2d   v  = (segment.second - segment.first).cast<double>();
+				    const Vec2d   va = (this->point - segment.first).cast<double>();
+				    const double  l2 = v.squaredNorm();  // avoid a sqrt
+				    const double  t  = (l2 == 0.0) ? 0. : clamp(0., 1., va.dot(v) / l2);
+				    // Closest point from this->point to the segment.
+				    const Vec2d   foot = segment.first.cast<double>() + t * v;
+					const Vec2d   bisector = foot - this->point.cast<double>();
+					const double  dist = bisector.norm();
+				    if ((! this->found || dist < this->distance) && this->dir_inside.dot(bisector) > 0) {
+						bool	accept = true;
+					    if (it_contour_and_segment->first == idx_contour) {
+							// Complex case: The closest segment originates from the same contour as the starting point.
+							// Reject the closest point if its distance along the contour is reasonable compared to the current contour bisector (this->pt, foot).
+							double param_lo = resampled_point_parameters[this->idx_point].curve_parameter;
+							double param_hi;
+							double param_end = resampled_point_parameters.back().curve_parameter;
+							const Slic3r::Points &ipts = *grid.contours()[it_contour_and_segment->first];
+							const size_t		  ipt  = it_contour_and_segment->second;
+							{
+								ResampledPoint key(ipt, false, 0.);
+								auto lower = [](const ResampledPoint& l, const ResampledPoint r) { return l.idx_src < r.idx_src || (l.idx_src == r.idx_src && int(l.interpolated) > int(r.interpolated)); };
+								auto it = std::lower_bound(resampled_point_parameters.begin(), resampled_point_parameters.end(), key, lower);
+								assert(it != resampled_point_parameters.end() && it->idx_src == ipt && ! it->interpolated);
+								param_hi = t * sqrt(l2);
+								if (ipt + 1 < ipts.size())
+									param_hi += it->curve_parameter;
+							}
+							if (param_lo > param_hi)
+								std::swap(param_lo, param_hi);
+							assert(param_lo > - SCALED_EPSILON && param_lo <= param_end + SCALED_EPSILON);
+							assert(param_hi > - SCALED_EPSILON && param_hi <= param_end + SCALED_EPSILON);
+							double dist_along_contour = std::min(param_hi - param_lo, param_lo + param_end - param_hi);
+							if (dist_along_contour < dist_same_contour_accept)
+								accept = false;
+							else if (dist < dist_same_contour_reject + SCALED_EPSILON) {
+								// this->point is close to foot. This point will only be accepted if the path along the contour is significantly 
+								// longer than the bisector. That is, the path shall not bulge away from the bisector too much.
+								// Bulge is estimated by 0.6 of the circle circumference drawn around the bisector.
+								// Test whether the contour is convex or concave.
+								bool inside = 
+									(t == 0.) ? this->inside_corner(ipts, ipt, this->point) :
+									(t == 1.) ? this->inside_corner(ipts, ipt + 1 == ipts.size() ? 0 : ipt + 1, this->point) :
+									this->left_of_segment(ipts, ipt, this->point);
+								accept = inside && dist_along_contour > 0.6 * M_PI * dist;
+							}
+					    }
+					    if (accept && (! this->found || dist < this->distance)) {
+					    	// Simple case: Just measure the shortest distance.
+							this->distance = dist;
+#ifdef CONTOUR_DISTANCE_DEBUG_SVG
+							this->closest_point = foot.cast<coord_t>();
+#endif /* CONTOUR_DISTANCE_DEBUG_SVG */
+							this->found    = true;
+					    }
+					}
+				}
+				// Continue traversing the grid.
+				return true;
+			}
+
+			const EdgeGrid::Grid 			   &grid;
+			const size_t 		  				idx_contour;
+			const Points					   &contour;
+			const std::vector<ResampledPoint>  &resampled_point_parameters;
+			const double                        dist_same_contour_accept;
+			const double 						dist_same_contour_reject;
+
+			size_t 								idx_point;
+			Point			      				point;
+			// Direction inside the contour from idx_point, not normalized.
+			Vec2d								dir_inside;
+			bool 								found;
+			double 								distance;
+#ifdef CONTOUR_DISTANCE_DEBUG_SVG
+			Point 								closest_point;
+#endif /* CONTOUR_DISTANCE_DEBUG_SVG */
+
+		private:
+			static Vec2d dir_inside_at_point(const Points &contour, size_t i) {
+				size_t iprev = prev_idx_modulo(i, contour);
+				size_t inext = next_idx_modulo(i, contour);
+				Vec2d v1 = (contour[i] - contour[iprev]).cast<double>();
+				Vec2d v2 = (contour[inext] - contour[i]).cast<double>();
+				return Vec2d(- v1.y() - v2.y(), v1.x() + v2.x());
+			}
+			static Vec2d dir_inside_at_segment(const Points& contour, size_t i) {
+				size_t inext = next_idx_modulo(i, contour);
+				Vec2d v = (contour[inext] - contour[i]).cast<double>();
+				return Vec2d(- v.y(), v.x());
+			}
+
+			static bool inside_corner(const Slic3r::Points &contour, size_t i, const Point &pt_oposite) {
+				const Vec2d pt = pt_oposite.cast<double>();
+				size_t iprev = prev_idx_modulo(i, contour);
+				size_t inext = next_idx_modulo(i, contour);
+				Vec2d v1 = (contour[i] - contour[iprev]).cast<double>();
+				Vec2d v2 = (contour[inext] - contour[i]).cast<double>();
+				bool  left_of_v1 = cross2(v1, pt - contour[iprev].cast<double>()) > 0.;
+				bool  left_of_v2 = cross2(v2, pt - contour[i    ].cast<double>()) > 0.;
+				return cross2(v1, v2) > 0 ? 
+					left_of_v1 && left_of_v2 : // convex corner
+					left_of_v1 || left_of_v2;  // concave corner
+			}
+			static bool left_of_segment(const Slic3r::Points &contour, size_t i, const Point &pt_oposite) {
+				const Vec2d pt = pt_oposite.cast<double>();
+				size_t inext = next_idx_modulo(i, contour);
+				Vec2d v = (contour[inext] - contour[i]).cast<double>();
+				return cross2(v, pt - contour[i].cast<double>()) > 0.;
+			}
+		} visitor(grid, idx_contour, resampled_point_parameters, 0.5 * compensation * M_PI, search_radius);
+
+		out.reserve(contour.size());
+		Point radius_vector(search_radius, search_radius);
+		for (const Point &pt : contour) {
+			visitor.init(contour, pt);
+			grid.visit_cells_intersecting_box(BoundingBox(pt - radius_vector, pt + radius_vector), visitor);
+			out.emplace_back(float(visitor.found ? std::min(visitor.distance, search_radius) : search_radius));
+
+#if 0
+//#ifdef CONTOUR_DISTANCE_DEBUG_SVG
+			if (out.back() < search_radius) {
+				SVG svg(debug_out_path("contour_distance_filtered-%d-%d.svg", iRun, int(&pt - contour.data())).c_str(), bbox);
+				svg.draw(expoly_grid);
+				svg.draw_outline(Polygon(contour), "blue", scale_(0.01));
+				svg.draw(pt, "green", coord_t(scale_(0.1)));
+				svg.draw(visitor.closest_point, "red", coord_t(scale_(0.1)));
+				printf("contour_distance_filtered-%d-%d.svg - distance %lf\n", iRun, int(&pt - contour.data()), unscale<double>(out.back()));
+			}
+#endif /* CONTOUR_DISTANCE_DEBUG_SVG */
+		}
+#ifdef CONTOUR_DISTANCE_DEBUG_SVG
+		if (out.back() < search_radius) {
+			SVG svg(debug_out_path("contour_distance_filtered-final-%d.svg", iRun).c_str(), bbox);
+			svg.draw(expoly_grid);
+			svg.draw_outline(Polygon(contour), "blue", scale_(0.01));
+			for (size_t i = 0; i < contour.size(); ++ i)
+				svg.draw(contour[i], out[i] < float(search_radius - SCALED_EPSILON) ? "red" : "green", coord_t(scale_(0.1)));
+		}
+#endif /* CONTOUR_DISTANCE_DEBUG_SVG */
+	}
+
+	return out;
+}
+
 Points resample_polygon(const Points &contour, double dist, std::vector<ResampledPoint> &resampled_point_parameters)
 {
 	Points out;
@@ -258,8 +445,8 @@ static inline void smooth_compensation(std::vector<float> &compensation, float s
 	std::vector<float> out(compensation);
 	for (size_t iter = 0; iter < num_iterations; ++ iter) {
 		for (size_t i = 0; i < compensation.size(); ++ i) {
-			float prev = (i == 0) ? compensation.back() : compensation[i - 1];
-			float next = (i + 1 == compensation.size()) ? compensation.front() : compensation[i + 1];
+			float prev = prev_value_modulo(i, compensation);
+			float next = next_value_modulo(i, compensation);
 			float laplacian = compensation[i] * (1.f - strength) + 0.5f * strength * (prev + next);
 			// Compensations are negative. Only apply the laplacian if it leads to lower compensation.
 			out[i] = std::max(laplacian, compensation[i]);
@@ -268,30 +455,6 @@ static inline void smooth_compensation(std::vector<float> &compensation, float s
 	}
 }
 
-template<typename INDEX_TYPE, typename CONTAINER>
-static inline INDEX_TYPE prev_idx_cyclic(INDEX_TYPE idx, const CONTAINER &container)
-{
-	if (idx == 0)
-		idx = INDEX_TYPE(container.size());
-	return -- idx;
-}
-
-template<typename INDEX_TYPE, typename CONTAINER>
-static inline INDEX_TYPE next_idx_cyclic(INDEX_TYPE idx, const CONTAINER &container)
-{
-	if (++ idx == INDEX_TYPE(container.size()))
-		idx = 0;
-	return idx;
-}
-
-template<class T, class U = T>
-static inline T exchange(T& obj, U&& new_value)
-{
-    T old_value = std::move(obj);
-    obj = std::forward<U>(new_value);
-    return old_value;
-}
-
 static inline void smooth_compensation_banded(const Points &contour, float band, std::vector<float> &compensation, float strength, size_t num_iterations)
 {
 	assert(contour.size() == compensation.size());
@@ -303,13 +466,13 @@ static inline void smooth_compensation_banded(const Points &contour, float band,
 		for (int i = 0; i < int(compensation.size()); ++ i) {
 			const Vec2f  pthis = contour[i].cast<float>();
 			
-			int		j     = prev_idx_cyclic(i, contour);
+			int		j     = prev_idx_modulo(i, contour);
 			Vec2f	pprev = contour[j].cast<float>();
 			float	prev  = compensation[j];
 			float	l2    = (pthis - pprev).squaredNorm();
 			if (l2 < dist_min2) {
 				float l = sqrt(l2);
-				int jprev = exchange(j, prev_idx_cyclic(j, contour));
+				int jprev = exchange(j, prev_idx_modulo(j, contour));
 				while (j != i) {
 					const Vec2f pp = contour[j].cast<float>();
 					const float lthis = (pp - pprev).norm();
@@ -324,17 +487,17 @@ static inline void smooth_compensation_banded(const Points &contour, float band,
 					prev  = use_min ? std::min(prev, compensation[j]) : compensation[j];
 					pprev = pp;
 					l     = lnext;
-					jprev = exchange(j, prev_idx_cyclic(j, contour));
+					jprev = exchange(j, prev_idx_modulo(j, contour));
 				}
 			}
 
-			j = next_idx_cyclic(i, contour);
+			j = next_idx_modulo(i, contour);
 			pprev = contour[j].cast<float>();
 			float next = compensation[j];
 			l2 = (pprev - pthis).squaredNorm();
 			if (l2 < dist_min2) {
 				float l = sqrt(l2);
-				int jprev = exchange(j, next_idx_cyclic(j, contour));
+				int jprev = exchange(j, next_idx_modulo(j, contour));
 				while (j != i) {
 					const Vec2f pp = contour[j].cast<float>();
 					const float lthis = (pp - pprev).norm();
@@ -349,7 +512,7 @@ static inline void smooth_compensation_banded(const Points &contour, float band,
 					next  = use_min ? std::min(next, compensation[j]) : compensation[j];
 					pprev = pp;
 					l     = lnext;
-					jprev = exchange(j, next_idx_cyclic(j, contour));
+					jprev = exchange(j, next_idx_modulo(j, contour));
 				}
 			}
 
@@ -396,7 +559,7 @@ ExPolygon elephant_foot_compensation(const ExPolygon &input_expoly, const Flow &
 			Polygon &poly = (idx_contour == 0) ? resampled.contour : resampled.holes[idx_contour - 1];
 			std::vector<ResampledPoint> resampled_point_parameters;
 			poly.points = resample_polygon(poly.points, resample_interval, resampled_point_parameters);
-			std::vector<float> dists = contour_distance(grid, idx_contour, poly.points, resampled_point_parameters, search_radius);
+			std::vector<float> dists = contour_distance2(grid, idx_contour, poly.points, resampled_point_parameters, scaled_compensation, search_radius);
 			for (float &d : dists) {
 	//			printf("Point %d, Distance: %lf\n", int(&d - dists.data()), unscale<double>(d));
 				// Convert contour width to available compensation distance.
@@ -414,12 +577,21 @@ ExPolygon elephant_foot_compensation(const ExPolygon &input_expoly, const Flow &
 		}
 
 		ExPolygons out_vec = variable_offset_inner_ex(resampled, deltas, 2.);
-		assert(out_vec.size() == 1);
 		if (out_vec.size() == 1)
 			out = std::move(out_vec.front());
-		else
+		else {
 			// Something went wrong, don't compensate.
 			out = input_expoly;
+#ifdef TESTS_EXPORT_SVGS
+			if (out_vec.size() > 1) {
+				static int iRun = 0;
+				SVG::export_expolygons(debug_out_path("elephant_foot_compensation-many_contours-%d.svg", iRun ++).c_str(),
+					{ { { input_expoly },   { "gray", "black", "blue", coord_t(scale_(0.02)), 0.5f, "black", coord_t(scale_(0.05)) } },
+					  { { out_vec },		{ "gray", "black", "blue", coord_t(scale_(0.02)), 0.5f, "black", coord_t(scale_(0.05)) } } });
+			}
+#endif /* TESTS_EXPORT_SVGS */
+			assert(out_vec.size() == 1);
+		}
 	}
 
 	return out;
diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp
index 9af2adcc6..71e896745 100644
--- a/src/libslic3r/Utils.hpp
+++ b/src/libslic3r/Utils.hpp
@@ -165,6 +165,65 @@ template<class T> size_t next_highest_power_of_2(T v,
     return next_highest_power_of_2(uint32_t(v));
 }
 
+template<typename INDEX_TYPE>
+inline INDEX_TYPE prev_idx_modulo(INDEX_TYPE idx, const INDEX_TYPE count)
+{
+	if (idx == 0)
+		idx = count;
+	return -- idx;
+}
+
+template<typename INDEX_TYPE>
+inline INDEX_TYPE next_idx_modulo(INDEX_TYPE idx, const INDEX_TYPE count)
+{
+	if (++ idx == count)
+		idx = 0;
+	return idx;
+}
+
+template<typename CONTAINER_TYPE>
+inline typename CONTAINER_TYPE::size_type prev_idx_modulo(typename CONTAINER_TYPE::size_type idx, const CONTAINER_TYPE &container) 
+{ 
+	return prev_idx_modulo(idx, container.size());
+}
+
+template<typename CONTAINER_TYPE>
+inline typename CONTAINER_TYPE::size_type next_idx_modulo(typename CONTAINER_TYPE::size_type idx, const CONTAINER_TYPE &container)
+{ 
+	return next_idx_modulo(idx, container.size());
+}
+
+template<typename CONTAINER_TYPE>
+inline typename const CONTAINER_TYPE::value_type& prev_value_modulo(typename CONTAINER_TYPE::size_type idx, const CONTAINER_TYPE &container) 
+{ 
+	return container[prev_idx_modulo(idx, container.size())];
+}
+
+template<typename CONTAINER_TYPE>
+inline typename CONTAINER_TYPE::value_type& prev_value_modulo(typename CONTAINER_TYPE::size_type idx, CONTAINER_TYPE &container) 
+{ 
+	return container[prev_idx_modulo(idx, container.size())];
+}
+
+template<typename CONTAINER_TYPE>
+inline typename const CONTAINER_TYPE::value_type& next_value_modulo(typename CONTAINER_TYPE::size_type idx, const CONTAINER_TYPE &container)
+{ 
+	return container[next_idx_modulo(idx, container.size())];
+}
+
+template<typename CONTAINER_TYPE>
+inline typename CONTAINER_TYPE::value_type& next_value_modulo(typename CONTAINER_TYPE::size_type idx, CONTAINER_TYPE &container)
+{ 
+	return container[next_idx_modulo(idx, container.size())];
+}
+
+template<class T, class U = T>
+inline T exchange(T& obj, U&& new_value)
+{
+    T old_value = std::move(obj);
+    obj = std::forward<U>(new_value);
+    return old_value;
+}
 
 extern std::string xml_escape(std::string text);
 
diff --git a/tests/libslic3r/test_elephant_foot_compensation.cpp b/tests/libslic3r/test_elephant_foot_compensation.cpp
index e5ea97e68..98ec5df52 100644
--- a/tests/libslic3r/test_elephant_foot_compensation.cpp
+++ b/tests/libslic3r/test_elephant_foot_compensation.cpp
@@ -220,8 +220,217 @@ static ExPolygon vase_with_fins()
 	return out;
 }
 
+static ExPolygon contour_with_hole()
+{
+	ExPolygon out;
+	out.contour.points = {
+		{ 23302819, 108248}, { 23410179, 157624}, { 23451825, 176777}, { 24106418, 478750}, { 24704172, 811512}, { 24883849, 911534}, { 25980045, 1530217}, { 26591038, 1897423}, { 26829981, 2041022}, { 27158523, 2249848}, { 27618921, 2584465}, 
+		{ 27896903, 2786507}, { 28144524, 2978990}, { 28815685, 3551061}, { 28909975, 3628821}, { 29371498, 4009409}, { 29402087, 4037084}, { 29493584, 4119861}, { 29765627, 4382947}, { 30607836, 5197449}, { 30934687, 5508413}, { 31019374, 5593546}, 
+		{ 31075807, 5655861}, { 31235879, 5823254}, { 31667505, 6274618}, { 31976596, 6656087}, { 32328364, 7055603}, { 32440973, 7183484}, { 32491346, 7249288}, { 33179667, 8148478}, { 33575401, 8717521}, { 33835875, 9075811}, { 34010014, 9315332}, 
+		{ 34304500, 9781688}, { 34369165, 9898535}, { 34397842, 9950359}, { 34494651, 10316439}, { 34501993, 10344190}, { 34385828, 10617514}, { 34331252, 10651174}, { 34084812, 10803186}, { 33894353, 10899665}, { 33398927, 11326583}, 
+		{ 33183121, 11494200}, { 32195826, 12261037}, { 31686925, 12719913}, { 31571718, 12807396}, { 31250995, 13050935}, { 31207108, 13086856}, { 31130381, 13149671}, { 31070741, 13206732}, { 30967095, 13305896}, { 30228082, 14071658}, 
+		{ 30116771, 14212337}, { 30044101, 14304176}, { 29567520, 14906137}, { 29043350, 15664879}, { 28911161, 15871189}, { 28855871, 15957479}, { 28714334, 16227582}, { 28650159, 16350050}, { 28364584, 16899765}, { 28240857, 17235607}, 
+		{ 28151371, 17509658}, { 28114198, 17623503}, { 28309361, 17730441}, { 28370394, 17763884}, { 28488974, 17847025}, { 28525745, 17872806}, { 29082248, 18281292}, { 29152930, 18376480}, { 29168058, 18396855}, { 29173722, 18656366}, 
+		{ 29176206, 18770149}, { 29167406, 18857292}, { 29104337, 19029141}, { 29049428, 19178752}, { 28907061, 19434701}, { 28857790, 19523283}, { 28715480, 19775043}, { 28630622, 20043684}, { 28609342, 20111052}, { 28573760, 20267045}, 
+		{ 28403454, 21103762}, { 28370165, 21230085}, { 28332310, 21373746}, { 28315057, 21418891}, { 28294569, 21472487}, { 28334157, 21579715}, { 28561468, 21814880}, { 28854906, 22118451}, { 29225599, 22499341}, { 29285205, 22617454}, 
+		{ 29324833, 22695983}, { 29313473, 22800767}, { 29312583, 22808982}, { 29272380, 22876835}, { 28829469, 23460472}, { 28817999, 23488286}, { 28796393, 23540675}, { 28775618, 23627381}, { 28732328, 23808034}, { 28661140, 24177335}, 
+		{ 28645731, 24834289}, { 28625222, 25202417}, { 28579034, 26031478}, { 28586310, 26420529}, { 28633240, 26560504}, { 28664456, 26653603}, { 28740916, 26788014}, { 28797005, 26886614}, { 28812464, 26950783}, { 28858428, 27009579}, 
+		{ 28975940, 26859631}, { 29022419, 26805440}, { 29115451, 26696972}, { 29135739, 26685915}, { 29155135, 26675346}, { 29408332, 26616458}, { 29592642, 26573591}, { 29614928, 26568091}, { 29711634, 26559197}, { 30723503, 26466299}, 
+		{ 31183646, 26470661}, { 31550568, 26550771}, { 31777556, 26600329}, { 32014697, 26671604}, { 32334931, 26854665}, { 32449353, 26920987}, { 32657873, 27041843}, { 32701539, 27084927}, { 32750872, 27133602}, { 33434549, 27790306}, 
+		{ 33487600, 27817659}, { 33548673, 27849142}, { 33793150, 28109624}, { 33877574, 28164293}, { 33965395, 28221161}, { 33999067, 28249986}, { 34024398, 28271673}, { 34059690, 28329572}, { 34087359, 28374972}, { 34181544, 28710471}, 
+		{ 34170186, 28732578}, { 34134947, 28801161}, { 34092867, 29064916}, { 33950784, 29233310}, { 33878646, 29318804}, { 33721956, 29672399}, { 33660358, 29727949}, { 33620108, 29764243}, { 33393624, 30270577}, { 33094597, 30771032}, 
+		{ 33063116, 30812704}, { 32973928, 30930779}, { 32608081, 31341847}, { 32393317, 31544017}, { 32206520, 31719862}, { 31997581, 31894374}, { 31972538, 31942583}, { 32059002, 32025240}, { 32171917, 32133182}, { 32501317, 32311025}, 
+		{ 32715593, 32426714}, { 32802065, 32479231}, { 32956210, 32574312}, { 33249042, 32770899}, { 33946833, 33239350}, { 34445301, 33680139}, { 34778020, 33974357}, { 35230994, 34391224}, { 35341113, 34460366}, { 35450459, 34529022}, 
+		{ 35625170, 34673345}, { 35764733, 34757179}, { 35775747, 34633947}, { 35846476, 34564107}, { 35965365, 34446723}, { 36038088, 34379954}, { 36151170, 34276133}, { 36426218, 34106680}, { 36531666, 34187969}, { 36695885, 34314565}, 
+		{ 37011093, 34586835}, { 37067557, 34150814}, { 37052506, 33989541}, { 37037043, 33823855}, { 37069574, 33661923}, { 37083653, 33591851}, { 37186706, 33497192}, { 37521634, 33288703}, { 37617140, 33275082}, { 37684699, 33219614}, 
+		{ 37821418, 33228393}, { 37938489, 33235910}, { 38091617, 33138918}, { 38155158, 33060873}, { 38213556, 32989142}, { 38727086, 32659362}, { 38746459, 32654507}, { 38809135, 32638806}, { 38820634, 32624462}, { 38855007, 32581573}, 
+		{ 39134002, 32235481}, { 39392850, 32163442}, { 39569189, 32115608}, { 39686862, 32083692}, { 39744314, 32146839}, { 39840707, 31963655}, { 39973169, 31711932}, { 40025735, 31592644}, { 40157184, 31465080}, { 40313010, 31313863}, 
+		{ 40390192, 31223588}, { 40418596, 31230809}, { 40594404, 31186692}, { 40732045, 31068306}, { 40746151, 30846139}, { 40761255, 30608300}, { 40853394, 30223426}, { 40876768, 30095588}, { 40895496, 29993166}, { 40968240, 29949606}, 
+		{ 41197066, 29989787}, { 41412367, 30027591}, { 41472384, 29977101}, { 41695297, 29659954}, { 41890516, 29382211}, { 42157410, 28987811}, { 42408947, 28616097}, { 42669462, 28292349}, { 42683144, 28275345}, { 42919982, 27924149}, 
+		{ 43162781, 27628506}, { 43527344, 27260325}, { 43847191, 27036250}, { 44057061, 26922424}, { 44231096, 26828037}, { 44301999, 26795490}, { 44327421, 26804561}, { 44319287, 26913761}, { 44143507, 27648484}, { 44107324, 27729499}, 
+		{ 44074236, 27803580}, { 44025541, 27932083}, { 43944121, 28146941}, { 43877811, 28710269}, { 43895199, 28764671}, { 43933238, 28883702}, { 43919165, 29004140}, { 43888109, 29269841}, { 43825852, 29576752}, { 43811824, 29609468}, 
+		{ 43748820, 29756420}, { 43763658, 29837769}, { 43832567, 30215488}, { 44075125, 29807258}, { 44209233, 29804204}, { 44310228, 29813855}, { 44365586, 29958259}, { 43873534, 30271247}, { 44003187, 30330249}, { 44617279, 30687869}, 
+		{ 44694113, 31070182}, { 44941015, 31257544}, { 45130334, 31171398}, { 45147836, 31132029}, { 45242053, 31070592}, { 45345637, 31033061}, { 45565937, 30953238}, { 45609517, 30857448}, { 45651888, 30764320}, { 45660681, 30754094}, 
+		{ 45822750, 30772646}, { 45944979, 30753042}, { 45964326, 30749938}, { 46054945, 30795588}, { 46577640, 31130668}, { 46870296, 31313313}, { 46976414, 31379541}, { 46998128, 31406087}, { 47008874, 31439291}, { 47031018, 31569281}, 
+		{ 47031214, 31576854}, { 47036334, 31774677}, { 47193705, 31889293}, { 47353245, 32029772}, { 47484683, 32145510}, { 47534251, 32233847}, { 47538509, 32241438}, { 47602626, 32453825}, { 47622648, 32465115}, { 47701707, 32575250}, 
+		{ 47776955, 33122018}, { 47677092, 33345574}, { 47630772, 33380015}, { 47572757, 33423150}, { 47328653, 33537512}, { 47343826, 33612940}, { 47462219, 33617810}, { 47578431, 33622591}, { 47808035, 33604884}, { 47842258, 33885890}, 
+		{ 47847000, 34154765}, { 47852298, 34455418}, { 47806556, 34798342}, { 47804979, 34803470}, { 47795265, 34835122}, { 47811501, 34879922}, { 47843100, 35247684}, { 47839663, 35481904}, { 47833503, 35902474}, { 47803910, 36044010}, 
+		{ 47819598, 36077879}, { 47841934, 36100587}, { 47854870, 36165755}, { 47911856, 36452861}, { 47927332, 36616382}, { 47936929, 36717785}, { 47770423, 36987292}, { 47699764, 37101659}, { 47671115, 37157488}, { 47423375, 37424772}, 
+		{ 47616349, 37518717}, { 47680621, 37550006}, { 47836151, 37632587}, { 47811936, 37777743}, { 47716954, 38113916}, { 47654340, 38250491}, { 47533407, 38514290}, { 47431515, 38674036}, { 47367427, 38987733}, { 47348164, 39043625}, 
+		{ 47298533, 39187606}, { 47279676, 39231940}, { 47252411, 39296047}, { 47246894, 39304927}, { 47238746, 39318037}, { 47232029, 39335258}, { 47220194, 39365593}, { 47196053, 39429922}, { 47159408, 39527585}, { 47041654, 39691835}, 
+		{ 47002148, 39908798}, { 46964248, 39997937}, { 46895728, 40159083}, { 46826610, 40301043}, { 46763479, 40430710}, { 46514929, 40884923}, { 46474179, 40918994}, { 46440818, 40946888}, { 46433233, 40992821}, { 46426528, 41033401}, 
+		{ 46108271, 41626808}, { 46056215, 41723876}, { 45997871, 41855066}, { 45755987, 42227269}, { 45653183, 42385466}, { 45444848, 42652871}, { 45380966, 42654262}, { 45336326, 42655238}, { 45326382, 42763461}, { 45318953, 42844333}, 
+		{ 45175146, 43086382}, { 45086585, 43235443}, { 45055897, 43281060}, { 44968051, 43418247}, { 44470500, 44195272}, { 44413430, 44364401}, { 44390221, 44433179}, { 44309502, 44528273}, { 44199667, 44604532}, { 43887229, 44833256}, 
+		{ 43815081, 44886070}, { 43726552, 44932547}, { 43689058, 44928887}, { 43686137, 44927822}, { 43280111, 44871367}, { 43249704, 44937548}, { 43324977, 45004000}, { 43046101, 45224515}, { 42898716, 45341059}, { 42838343, 45382240}, 
+		{ 42721108, 45493632}, { 42470119, 45669357}, { 42359756, 45746630}, { 42073412, 45910212}, { 42022050, 45926905}, { 41907133, 46027394}, { 41144940, 46559849}, { 40902566, 46683907}, { 40884989, 46688481}, { 40811763, 46707548}, 
+		{ 40768612, 46786655}, { 40675645, 46871372}, { 40548269, 46985681}, { 40382460, 47085920}, { 40082094, 47267510}, { 39768380, 47413990}, { 39734614, 47420931}, { 39586801, 47437916}, { 39408498, 47458403}, { 39355630, 47574767}, 
+		{ 39281498, 47737937}, { 39251009, 47783502}, { 39152882, 47890727}, { 39013408, 48043132}, { 38921577, 48100514}, { 38896008, 48108330}, { 38727116, 48102492}, { 38692428, 48101294}, { 38425261, 48075982}, { 38342344, 48047392}, 
+		{ 38336010, 48154957}, { 38151978, 48395628}, { 37811687, 48488990}, { 37804084, 48490379}, { 37674998, 48513979}, { 37674196, 48513196}, { 37658712, 48498074}, { 37592273, 48482371}, { 37336907, 48659173}, { 37140701, 48741338}, 
+		{ 37129466, 48764064}, { 37075599, 48873013}, { 36739574, 48838715}, { 36721697, 48864552}, { 36456161, 49171298}, { 36442740, 49184060}, { 36436660, 49212679}, { 36300951, 49585030}, { 36223897, 49727927}, { 36150156, 49864671}, 
+		{ 35924446, 50245885}, { 35769083, 50508275}, { 35750118, 50514284}, { 35323137, 50653609}, { 34050908, 50703703}, { 33864494, 50706292}, { 33666152, 50709051}, { 33813201, 50839130}, { 33884905, 50893350}, { 33912037, 50913867}, 
+		{ 34282238, 51132740}, { 35016181, 51605972}, { 35027459, 51615787}, { 35030754, 51618656}, { 35108803, 51693454}, { 35137469, 51720927}, { 34948522, 51872654}, { 34658613, 52064227}, { 34464997, 52192175}, { 34289189, 52285353}, 
+		{ 34219119, 52312637}, { 33847969, 52428212}, { 33681538, 52480036}, { 33407178, 52510887}, { 33421683, 52685666}, { 33428342, 52765908}, { 33392094, 53146294}, { 33371466, 53362761}, { 33253040, 54291767}, { 33196142, 54612534}, 
+		{ 33128154, 54815569}, { 33095559, 54912904}, { 32570427, 55111061}, { 32525706, 55125923}, { 32458612, 55148214}, { 32385063, 55163161}, { 32282016, 55184108}, { 32241393, 55188603}, { 32190544, 55194226}, { 32027959, 55217259}, 
+		{ 32011561, 56072729}, { 32003567, 57064095}, { 31997637, 57799631}, { 32015577, 60287161}, { 32014290, 61201940}, { 32012996, 62120667}, { 32007630, 62197246}, { 32002828, 62265761}, { 32003310, 62373952}, { 32003630, 62444825}, 
+		{ 31951202, 63100419}, { 31935103, 63301732}, { 31937490, 63354807}, { 31968533, 64124669}, { 32071989, 64767136}, { 32091323, 64947492}, { 32101518, 65042609}, { 32140486, 65216353}, { 32159835, 65302616}, { 32422071, 66001036}, 
+		{ 32441049, 66056128}, { 32463003, 66119864}, { 32483582, 66164217}, { 32504016, 66208251}, { 32702117, 66557895}, { 32734168, 66611648}, { 32759723, 66654509}, { 32985249, 66546464}, { 33208649, 66439436}, { 33424955, 66330151}, 
+		{ 33554797, 66263457}, { 33891385, 66090564}, { 34622897, 65616004}, { 34819546, 65471063}, { 34988926, 65346218}, { 35739513, 64794843}, { 36421629, 64150515}, { 36944662, 63656452}, { 36959929, 63643292}, { 36964174, 63639854}, 
+		{ 36973615, 63630686}, { 37023366, 63597643}, { 37652255, 63172287}, { 37804320, 63100590}, { 37939211, 63174238}, { 37949998, 63178562}, { 38147664, 63257792}, { 38147652, 63269386}, { 38147521, 63403665}, { 38150429, 63418056}, 
+		{ 38177182, 63550576}, { 38159827, 64298859}, { 38153585, 64520174}, { 38146482, 64771937}, { 38142126, 64820836}, { 38138239, 64839298}, { 38115242, 65010431}, { 38113231, 65025393}, { 37912271, 66372984}, { 37841830, 66687479}, 
+		{ 37674277, 67228175}, { 37551047, 67593509}, { 37497098, 67727333}, { 37392268, 67951311}, { 36986640, 68817980}, { 36604483, 69575518}, { 36479686, 69769345}, { 36265058, 70102690}, { 36332308, 70163400}, { 36398395, 70223058}, 
+		{ 36718105, 70645723}, { 36714573, 70708131}, { 36707947, 70825274}, { 36665865, 71083146}, { 36295751, 71910509}, { 36243731, 72020144}, { 36010145, 72512434}, { 35364761, 74115820}, { 35327445, 74206370}, { 35287332, 74303707}, 
+		{ 35262905, 74370595}, { 35235816, 74444782}, { 35006275, 75142899}, { 34758612, 75896141}, { 34609479, 76324076}, { 34534936, 76598593}, { 34419529, 77019735}, { 34125782, 78091675}, { 34270135, 78023153}, { 34366481, 77977415}, 
+		{ 34669421, 77827427}, { 35532698, 77282412}, { 35875762, 77065829}, { 35924952, 77041288}, { 35981906, 77004141}, { 36227708, 76899428}, { 36700108, 76693284}, { 36835857, 76657801}, { 36942059, 76731654}, { 36959107, 76741135}, 
+		{ 37155031, 76850094}, { 37152161, 76868751}, { 37133420, 76990662}, { 37135224, 77014721}, { 37144331, 77136260}, { 37029215, 77783623}, { 36994547, 77984972}, { 36957442, 78200506}, { 36949745, 78231593}, { 36945059, 78243379}, 
+		{ 36909925, 78358183}, { 36908693, 78362210}, { 36517584, 79569608}, { 36400200, 79852238}, { 36160758, 80317591}, { 36001388, 80606724}, { 35929263, 80720331}, { 35803937, 80894237}, { 35313741, 81574455}, { 34810829, 82211118}, 
+		{ 34636165, 82398130}, { 34424143, 82625140}, { 34177218, 82875584}, { 34001320, 83053991}, { 33330876, 83686990}, { 33313615, 83940131}, { 33257889, 84757318}, { 33154596, 86125618}, { 33050414, 87930914}, { 33037323, 88157771}, 
+		{ 32996151, 88791902}, { 33122354, 88720953}, { 34042644, 88195810}, { 34854618, 87571171}, { 35217422, 87292077}, { 35240201, 87279017}, { 35256654, 87268145}, { 35304044, 87230648}, { 35465557, 87154377}, { 35979874, 86886707}, 
+		{ 36162994, 86833255}, { 36213131, 86859811}, { 36328089, 86920714}, { 36446386, 87103899}, { 36444792, 87129675}, { 36435583, 87278561}, { 36439166, 87306042}, { 36455346, 87430153}, { 36439626, 87577638}, { 36363937, 88287781}, 
+		{ 36334385, 88516418}, { 36324472, 88550288}, { 36266923, 88831775}, { 36258817, 88871412}, { 36009099, 90001153}, { 35925390, 90278389}, { 35742522, 90743063}, { 35584494, 91114154}, { 35511233, 91260521}, { 35378328, 91493626}, 
+		{ 34896978, 92337857}, { 34592698, 92829175}, { 34534101, 92906355}, { 34379904, 93109443}, { 34292029, 93224277}, { 34181322, 93368951}, { 33996695, 93594059}, { 33791238, 93844563}, { 33350304, 94350448}, { 32679061, 95059135}, 
+		{ 32663276, 95383974}, { 32630835, 96051559}, { 32623715, 96162432}, { 32625261, 96184173}, { 32631760, 96253789}, { 32637940, 96319986}, { 32671334, 96831435}, { 32555999, 97073603}, { 32552956, 97110111}, { 32549772, 97148299}, 
+		{ 32339278, 100576678}, { 32333722, 100685777}, { 32330348, 100752035}, { 32315766, 101012907}, { 32604225, 100816839}, { 32833219, 100661190}, { 33690734, 100037568}, { 33947721, 99810841}, { 34263306, 99532414}, { 34709871, 99161136}, 
+		{ 35458100, 98470566}, { 35535202, 98409290}, { 35673889, 98299068}, { 35825183, 98230993}, { 36031300, 98138241}, { 36364183, 98058757}, { 36389853, 98099020}, { 36443213, 98182736}, { 36495776, 98421334}, { 36464592, 98534766}, 
+		{ 36403262, 98757832}, { 36433188, 98786253}, { 36468201, 98819516}, { 36427877, 99135414}, { 36380139, 99509425}, { 36367327, 99566653}, { 36130997, 100458902}, { 36092849, 100736616}, { 35993189, 101207413}, { 35961980, 101354843}, 
+		{ 35901824, 101565944}, { 35599001, 102436249}, { 35598486, 102437494}, { 35525627, 102612717}, { 35498238, 102672427}, { 35179093, 103368204}, { 34902420, 103873765}, { 34074371, 105280790}, { 33796945, 105666257}, { 33430747, 106175067}, 
+		{ 32757675, 107021332}, { 32288404, 107611357}, { 32147333, 107782229}, { 32045181, 107903768}, { 32013865, 108446053}, { 32004365, 108597331}, { 31933356, 109727991}, { 31929556, 109801743}, { 31921205, 109963885}, { 31919950, 109998202}, 
+		{ 31917378, 110068478}, { 31935487, 110174763}, { 31962352, 110332410}, { 31868759, 110776536}, { 31779274, 112901692}, { 31772558, 113008639}, { 31763520, 113152580}, { 31760914, 113226796}, { 31757613, 113320828}, { 31878079, 113245898}, 
+		{ 32056600, 113134847}, { 32205325, 113028281}, { 32417383, 112876331}, { 32791706, 112611586}, { 33374891, 112199137}, { 34043729, 111739447}, { 34299836, 111533282}, { 34686259, 111194925}, { 35041202, 110899316}, { 36153161, 109973245}, 
+		{ 36489565, 109732139}, { 36935134, 109547251}, { 36998142, 109523782}, { 37285208, 109416845}, { 37303575, 109443686}, { 37380657, 109556352}, { 37429339, 109768662}, { 37389406, 109896075}, { 37312708, 110140778}, { 37330397, 110173101}, 
+		{ 37358669, 110224762}, { 37347970, 110508588}, { 37343682, 110622428}, { 37233824, 111039422}, { 36974286, 111866215}, { 36941457, 112104350}, { 36810462, 112600390}, { 36763361, 112778757}, { 36685333, 113003686}, { 36304140, 113929965}, 
+		{ 36303227, 113931942}, { 36219925, 114112998}, { 36185254, 114177524}, { 35766113, 114957538}, { 35699185, 115058398}, { 35271549, 115739102}, { 34529522, 116832154}, { 34230604, 117226448}, { 34152175, 117323267}, { 33753453, 117815498}, 
+		{ 33688745, 117896887}, { 33515149, 118115220}, { 33167360, 118505862}, { 32252839, 119533076}, { 31951224, 119865885}, { 31856676, 119967574}, { 31811772, 120013039}, { 31820788, 120150853}, { 31837447, 120637820}, { 31884548, 122014628}, 
+		{ 31884879, 122025348}, { 31884889, 122025915}, { 31884859, 122030715}, { 31853727, 124752378}, { 31852710, 125798379}, { 32040109, 125687330}, { 32336721, 125511560}, { 33050838, 125039566}, { 33741293, 124531865}, { 34004877, 124347492}, 
+		{ 34706008, 123857040}, { 34900746, 123695124}, { 35248769, 123405773}, { 35958009, 122839178}, { 36752647, 122139217}, { 36794698, 122103853}, { 36926183, 121993279}, { 37041929, 121900209}, { 37364281, 121641009}, { 37506782, 121535931}, 
+		{ 37599623, 121475276}, { 37805210, 121390600}, { 38274450, 121197339}, { 38429386, 121137935}, { 38611951, 121409191}, { 38647554, 121490884}, { 38558179, 121763354}, { 38544345, 121816126}, { 38504735, 121967178}, { 38540287, 122025777}, 
+		{ 38533522, 122225637}, { 38527834, 122393821}, { 38490015, 122574939}, { 38335371, 123023448}, { 38226910, 123422167}, { 38128017, 123785706}, { 38110062, 123913558}, { 38039445, 124196782}, { 37811751, 125109983}, { 37795287, 125159401}, 
+		{ 37789856, 125175267}, { 37747302, 125281671}, { 37678378, 125454008}, { 37326009, 126304036}, { 37280379, 126403545}, { 36723741, 127438116}, { 36607591, 127622339}, { 35307172, 129556108}, { 34960577, 130042788}, { 34625146, 130457962}, 
+		{ 34244496, 130929114}, { 33616736, 131638592}, { 33126427, 132192717}, { 32289044, 133098400}, { 32128210, 133254928}, { 32114672, 133265860}, { 32051379, 133303244}, { 31973610, 133349175}, { 32021296, 134019482}, { 32078232, 134927829}, 
+		{ 32192915, 136757391}, { 32250210, 137342897}, { 32301584, 137908848}, { 32406571, 139065434}, { 32456488, 139422175}, { 32511513, 139855909}, { 32587723, 140456611}, { 33065481, 140191593}, { 33323332, 140063408}, { 33766028, 139843340}, 
+		{ 33978698, 139717429}, { 34224999, 139571601}, { 35090288, 139002456}, { 36098536, 138270161}, { 36204726, 138196467}, { 36870073, 137734734}, { 36937868, 137678015}, { 37269439, 137400662}, { 38224552, 136636721}, { 39248462, 135736109}, 
+		{ 39262231, 135724978}, { 39431206, 135588270}, { 39558286, 135491389}, { 40066663, 135103831}, { 40597978, 134876486}, { 40913397, 134752602}, { 41009750, 134730971}, { 41033440, 134769160}, { 41137853, 134937472}, { 41236776, 135135656}, 
+		{ 41185372, 135392011}, { 41170368, 135466840}, { 41117848, 135629223}, { 41128977, 135726643}, { 41112112, 135925316}, { 41028443, 136275112}, { 40892177, 136737346}, { 40715316, 137337282}, { 40625973, 137862286}, { 40571054, 138077826}, 
+		{ 40413004, 138698127}, { 40307787, 139028628}, { 40280705, 139108396}, { 40108570, 139542037}, { 39781168, 140366808}, { 39776747, 140377453}, { 39771298, 140388940}, { 39694209, 140532631}, { 39126953, 141589960}, { 39112976, 141613526}, 
+		{ 38864787, 141998169}, { 38780359, 142124163}, { 37534211, 143983846}, { 36837998, 144898691}, { 36749607, 145008489}, { 36437049, 145396720}, { 36308895, 145540735}, { 35926199, 145970826}, { 35104551, 146848709}, { 34756762, 147234955}, 
+		{ 34428436, 147599589}, { 34120556, 147908106}, { 34059694, 147944671}, { 33992021, 147971830}, { 33888925, 148013197}, { 33994002, 148234139}, { 34102871, 148463060}, { 34260406, 148815390}, { 34505558, 149252538}, { 34649150, 149539737}, 
+		{ 34875213, 149991894}, { 34913367, 150060689}, { 34939834, 150108425}, { 35009188, 150222655}, { 35057146, 150301638}, { 35531716, 151039155}, { 35961908, 151607166}, { 36198106, 151919026}, { 37112008, 151466356}, { 37122527, 151461129}, 
+		{ 37143274, 151448455}, { 37793852, 151104327}, { 38753278, 150462096}, { 39057095, 150265965}, { 39387132, 150052914}, { 39992757, 149578233}, { 40209373, 149410006}, { 40448656, 149224173}, { 41648972, 148150708}, { 41827582, 147994189}, 
+		{ 42089284, 147764870}, { 42281920, 147557241}, { 42535672, 147283737}, { 43211137, 146606344}, { 43969650, 145734949}, { 44008274, 145690567}, { 44434382, 145256367}, { 44673165, 145036231}, { 44753304, 144976343}, { 44941707, 144886575}, 
+		{ 45449136, 144644796}, { 45533221, 144617860}, { 45594657, 144672684}, { 45686988, 144755077}, { 45821054, 144894151}, { 45845698, 144928928}, { 45802394, 145256827}, { 45801968, 145263145}, { 45793099, 145396327}, { 45826083, 145436911}, 
+		{ 45827387, 145448733}, { 45852550, 145676686}, { 45846396, 146183080}, { 45801072, 146729105}, { 45751200, 147329993}, { 45765306, 147565974}, { 45765766, 147690105}, { 45758629, 147823920}, { 45717918, 148587045}, { 45669293, 148998256}, 
+		{ 45657164, 149090109}, { 45565455, 149517107}, { 45390903, 150329829}, { 45380310, 150370709}, { 45303883, 150599765}, { 45049477, 151362234}, { 45041081, 151384892}, { 44988127, 151512567}, { 44899898, 151709940}, { 44188361, 153301702}, 
+		{ 43960091, 153807492}, { 43687530, 154326968}, { 43680264, 154339888}, { 43428400, 154787836}, { 43418419, 154804941}, { 43222756, 155140257}, { 43211901, 155157187}, { 43019606, 155457042}, { 42439201, 156284412}, { 42742998, 156320854}, 
+		{ 42946786, 156345296}, { 43218356, 156408139}, { 43490220, 156548626}, { 43600789, 156605776}, { 43616758, 156616967}, { 43638494, 156675797}, { 43689725, 156874320}, { 43697411, 156939181}, { 43667792, 157194800}, { 43663112, 157219786}, 
+		{ 43589483, 157612846}, { 43578259, 157650201}, { 43503908, 157897703}, { 43271842, 158586008}, { 43026656, 159112379}, { 42680049, 159768278}, { 42229097, 160621619}, { 41614538, 161818913}, { 41602009, 161838594}, { 41549009, 161921905}, 
+		{ 41366702, 162195210}, { 41089703, 162610457}, { 41051349, 162661598}, { 40028827, 163938879}, { 39981539, 163995316}, { 39859709, 164140726}, { 39557928, 164489623}, { 38840108, 165319487}, { 38817977, 165343409}, { 36508721, 167822791}, 
+		{ 35803734, 168527171}, { 35265129, 169065323}, { 35217638, 169111343}, { 35182142, 169143335}, { 34143283, 170051242}, { 34091092, 170092305}, { 33992346, 170169987}, { 32820222, 171015261}, { 32596277, 171172367}, { 32366414, 171333625}, 
+		{ 30949741, 172256683}, { 30776429, 172369214}, { 30685231, 172428426}, { 29784929, 172978028}, { 29711510, 173022900}, { 29649347, 173060901}, { 29626880, 173084470}, { 29607989, 173104288}, { 29476620, 173372906}, { 29166644, 173374167}, 
+		{ 29105869, 173396269}, { 29066168, 173410694}, { 28480959, 173773359}, { 28318456, 173874074}, { 28236958, 173920336}, { 28053468, 174015451}, { 27663961, 174212865}, { 26444009, 174781179}, { 25128636, 175292014}, { 24833691, 175404475}, 
+		{ 24567873, 175499255}, { 23673660, 175815148}, { 23263816, 175959931}, { 22989484, 175996217}, { 22919277, 176005507}, { 22821755, 176011321}, { 22593369, 175931875}, { 22197778, 175796707}, { 20895444, 175329856}, { 20562493, 175210506}, 
+		{ 20357518, 175131409}, { 19431901, 174778687}, { 19227774, 174700914}, { 17432818, 173805114}, { 17355249, 173765680}, { 17340552, 173757060}, { 17293649, 173727963}, { 15176003, 172414266}, { 14987901, 172296594}, { 14897452, 172240019}, 
+		{ 14730104, 172123866}, { 14649567, 172067971}, { 12604451, 170685425}, { 12582065, 170669040}, { 12501564, 170610143}, { 12483411, 170595498}, { 12418519, 170543227}, { 11146256, 169546467}, { 11131285, 169533173}, { 10973608, 169393198}, 
+		{ 10963368, 169383375}, { 10855356, 169279681}, { 9350332, 167783891}, { 9237755, 167663880}, { 9038028, 167450975}, { 7554140, 165846157}, { 6510331, 164717307}, { 6450301, 164645790}, { 4792198, 162599032}, { 4711896, 162499401}, 
+		{ 4702892, 162486484}, { 4689884, 162466018}, { 4689721, 162465748}, { 4111625, 161512044}, { 3262811, 159825639}, { 3085907, 159501392}, { 2964224, 159278374}, { 2880198, 159123098}, { 2827825, 159026309}, { 2730830, 158798250}, 
+		{ 2662597, 158637824}, { 2461794, 158144454}, { 2258655, 157377436}, { 2232776, 156966420}, { 2227381, 156880727}, { 2229842, 156800001}, { 2404803, 156571898}, { 2502593, 156512353}, { 2571069, 156470646}, { 3012355, 156329121}, 
+		{ 3172690, 156317433}, { 3263007, 156310852}, { 3448807, 156270050}, { 2933268, 155537448}, { 2932334, 155536119}, { 2690506, 155171633}, { 2473838, 154800417}, { 2214521, 154335871}, { 1956160, 153843466}, { 1643404, 153150964}, 
+		{ 936422, 151585583}, { 886715, 151471650}, { 881872, 151459055}, { 835673, 151315362}, { 420381, 150023686}, { 415543, 150006511}, { 411493, 149986474}, { 371105, 149740432}, { 184472, 148603483}, { 176976, 148544106}, { 143829, 148268525}, 
+		{ 141423, 148213179}, { 118798, 147692447}, { 141994, 147109270}, { 96664, 146619882}, { 46940, 146083025}, { 34028, 145778412}, { 32148, 145734124}, { 50580, 145571914}, { 79797, 145477573}, { 59893, 144996644}, { 53607, 144916874}, 
+		{ 75632, 144881102}, { 170230, 144783356}, { 367047, 144609349}, { 495089, 144649841}, { 696206, 144748339}, { 861062, 144829070}, { 1202743, 145013350}, { 1665932, 145467720}, { 1738044, 145542186}, { 1871110, 145679584}, { 2233705, 146073631}, 
+		{ 2875888, 146771504}, { 2976802, 146887761}, { 3008358, 146918708}, { 3105019, 147016992}, { 3562844, 147482514}, { 3900940, 147829488}, { 3926192, 147851556}, { 5456634, 149216502}, { 5473415, 149229592}, { 5678115, 149389248}, 
+		{ 6416516, 149979537}, { 6693887, 150160404}, { 7011978, 150367823}, { 8034093, 151060650}, { 8245822, 151174920}, { 8663509, 151400371}, { 8734568, 151444233}, { 9700825, 151913516}, { 10314440, 151101573}, { 10876143, 150241580}, 
+		{ 10937084, 150142918}, { 10989872, 150057455}, { 11012110, 150016058}, { 11029139, 149984364}, { 11202330, 149640866}, { 11331097, 149385460}, { 11601540, 148893595}, { 11801542, 148453984}, { 11867898, 148312015}, { 12006182, 148016156}, 
+		{ 11936334, 147987685}, { 11846756, 147951181}, { 11775937, 147908929}, { 11448318, 147578728}, { 10005162, 146006655}, { 9941330, 145934468}, { 9420742, 145345782}, { 9364739, 145276533}, { 9005053, 144831776}, { 8354706, 143947082}, 
+		{ 7741954, 143034251}, { 7046776, 141998616}, { 6866979, 141726486}, { 6759755, 141551328}, { 6581042, 141228382}, { 6214827, 140566592}, { 6160332, 140464737}, { 6154984, 140452943}, { 6118667, 140365627}, { 5608006, 139066930}, 
+		{ 5576877, 138974353}, { 5449821, 138579522}, { 5423448, 138473840}, { 5269717, 137857830}, { 5183256, 137323221}, { 5051763, 136885377}, { 4900390, 136381329}, { 4788716, 135926420}, { 4778542, 135832434}, { 4751278, 135580592}, 
+		{ 4759133, 135551850}, { 4772567, 135502722}, { 4750760, 135428400}, { 4689711, 135220325}, { 4720284, 134950229}, { 4772938, 134876983}, { 4872059, 134739100}, { 4907041, 134734799}, { 4988166, 134747911}, { 5187996, 134827143}, 
+		{ 5324282, 134881173}, { 5823633, 135095262}, { 6457261, 135576778}, { 6468046, 135585394}, { 6645027, 135726930}, { 7665807, 136625984}, { 8014871, 136908364}, { 8760642, 137511681}, { 9070115, 137764153}, { 9505207, 138067027}, 
+		{ 9692018, 138199840}, { 10866067, 139034528}, { 10974854, 139102654}, { 11199174, 139243162}, { 11980766, 139757269}, { 12820102, 140204762}, { 13013724, 140301821}, { 13307713, 140449197}, { 13339465, 140204984}, { 13387908, 139832384}, 
+		{ 13476326, 139229254}, { 13545245, 138464294}, { 13637934, 137435521}, { 13704650, 136750183}, { 13756310, 135946981}, { 13854009, 134427968}, { 13931781, 133352665}, { 13880515, 133326641}, { 13806176, 133288914}, { 13608773, 133095964}, 
+		{ 13229938, 132676064}, { 12917088, 132329299}, { 12475540, 131854762}, { 12234438, 131582242}, { 11645945, 130917061}, { 11435343, 130656410}, { 11256705, 130435328}, { 11087956, 130227341}, { 10943531, 130049329}, { 10660547, 129658000}, 
+		{ 9884836, 128504691}, { 9363495, 127729593}, { 9183437, 127445707}, { 8613352, 126392173}, { 8569664, 126295529}, { 8233135, 125484892}, { 8100143, 125150567}, { 8091324, 125125230}, { 8068370, 125055541}, { 8047369, 124966573}, 
+		{ 7827878, 124036734}, { 7815999, 123941440}, { 7743138, 123689990}, { 7467916, 122740178}, { 7381012, 122383130}, { 7365871, 122250909}, { 7330956, 121946008}, { 7347071, 121910652}, { 7366239, 121868607}, { 7337555, 121775565}, 
+		{ 7275180, 121573218}, { 7357784, 121255913}, { 7363162, 121248563}, { 7433561, 121152362}, { 7492882, 121172887}, { 8152120, 121400901}, { 8296078, 121458859}, { 8337642, 121483827}, { 8428744, 121552386}, { 8461373, 121578560}, 
+		{ 9113408, 122101612}, { 9968838, 122858025}, { 10418874, 123221408}, { 11203964, 123855334}, { 11236475, 123882487}, { 11264272, 123901717}, { 12869603, 125041315}, { 13619004, 125547677}, { 13833945, 125671552}, { 14049136, 125795572}, 
+		{ 14042979, 124631730}, { 14031124, 123791039}, { 14029618, 123425913}, { 14024871, 122275773}, { 14024680, 122240909}, { 14024300, 122172017}, { 14024368, 122132419}, { 14024494, 122058437}, { 14025750, 122003675}, { 14028093, 121901540}, 
+		{ 14053706, 121051621}, { 14084937, 120015176}, { 13976495, 119893307}, { 12808105, 118596333}, { 12632795, 118395530}, { 12332420, 118051483}, { 12010936, 117651678}, { 11662489, 117218341}, { 11286185, 116695820}, { 10542401, 115590915}, 
+		{ 10484664, 115505145}, { 10085127, 114875400}, { 9677465, 114107097}, { 9676038, 114103997}, { 9587011, 113910478}, { 9572058, 113874387}, { 9221672, 113028545}, { 9132465, 112762183}, { 8929936, 112011523}, { 8896027, 111773355}, 
+		{ 8763540, 111338847}, { 8591711, 110775312}, { 8585822, 110750616}, { 8583286, 110726469}, { 8532504, 110242770}, { 8561517, 110201837}, { 8589689, 110162093}, { 8539283, 109999835}, { 8459773, 109743891}, { 8476274, 109635698}, 
+		{ 8539247, 109532026}, { 8559299, 109499015}, { 8639538, 109407427}, { 8837219, 109481673}, { 9374636, 109713713}, { 9614985, 109884378}, { 9895885, 110108176}, { 10150796, 110311272}, { 10647433, 110745796}, { 11163900, 111149653}, 
+		{ 11435641, 111378216}, { 11952173, 111812662}, { 12063358, 111892355}, { 12195941, 111987389}, { 13754894, 113077948}, { 13965930, 113207021}, { 14143358, 113315534}, { 14095680, 112195851}, { 14075275, 111736247}, { 14031684, 110754424}, 
+		{ 13949266, 109698295}, { 13931155, 109374956}, { 13907232, 108947887}, { 13903305, 108820557}, { 13899752, 108705317}, { 13898286, 108692370}, { 13896892, 108680054}, { 13882077, 108455610}, { 13866991, 108227067}, { 13852378, 107897586}, 
+		{ 13627196, 107630194}, { 13249326, 107173733}, { 13128837, 107021896}, { 12504668, 106235327}, { 12449045, 106156712}, { 12301165, 105947708}, { 12240927, 105864439}, { 12071292, 105629917}, { 11741182, 105140360}, { 11102902, 104050785}, 
+		{ 11009874, 103891983}, { 10724262, 103375048}, { 10370561, 102607103}, { 10302463, 102446702}, { 9995869, 101563023}, { 9933827, 101340326}, { 9788639, 100674614}, { 9761576, 100425516}, { 9620310, 99895785}, { 9572074, 99714909}, 
+		{ 9473316, 99261511}, { 9457110, 98860065}, { 9475422, 98813097}, { 9491516, 98771818}, { 9454445, 98628574}, { 9395112, 98399301}, { 9430018, 98201406}, { 9448015, 98172416}, { 9519385, 98057456}, { 9858391, 98155219}, { 10045563, 98209192}, 
+		{ 10217386, 98274096}, { 10328458, 98365757}, { 11168922, 99136589}, { 11517095, 99428522}, { 11782963, 99664460}, { 12152171, 99992110}, { 12543518, 100270019}, { 12914813, 100533689}, { 13199749, 100744460}, { 13324020, 100835567}, 
+		{ 13585579, 101027330}, { 13575682, 100826649}, { 13569447, 100700201}, { 13562345, 100567361}, { 13559065, 100506021}, { 13429751, 98521010}, { 13371150, 97621467}, { 13343156, 97180710}, { 13333987, 97039073}, { 13207473, 95084673}, 
+		{ 13138184, 95005008}, { 13017680, 94866468}, { 12083312, 93848129}, { 12022705, 93771797}, { 11862461, 93569995}, { 11784430, 93470508}, { 11589381, 93221813}, { 11309567, 92840780}, { 10844778, 92098029}, { 10775191, 91976786}, 
+		{ 10496881, 91491862}, { 10185086, 90849349}, { 10144137, 90764963}, { 10074833, 90600171}, { 9828579, 89857830}, { 9703614, 89075796}, { 9674971, 88969502}, { 9495272, 88102892}, { 9475468, 87916753}, { 9440640, 87589408}, { 9465676, 87528619}, 
+		{ 9487914, 87474617}, { 9465041, 87357340}, { 9428525, 87170118}, { 9490390, 86904119}, { 9512256, 86883153}, { 9574632, 86823334}, { 9727402, 86841642}, { 10166330, 86894255}, { 10190151, 86899193}, { 10198409, 86903284}, { 10249971, 86942095}, 
+		{ 10299758, 86980568}, { 11788945, 88131376}, { 11901024, 88196968}, { 12050012, 88284161}, { 12770268, 88697024}, { 12893258, 88767518}, { 12865978, 88340499}, { 12755514, 86383203}, { 12590001, 84209400}, { 12584956, 84143148}, 
+		{ 12549052, 83666692}, { 11929877, 83107725}, { 11390770, 82556851}, { 11083660, 82243035}, { 10537284, 81546957}, { 10424674, 81403496}, { 10079867, 80926984}, { 9689286, 80270083}, { 9687616, 80267071}, { 9615613, 80136762}, 
+		{ 9601056, 80104215}, { 9309849, 79453353}, { 9259598, 79312241}, { 9118888, 78788995}, { 9088297, 78585733}, { 8994447, 78301695}, { 8881493, 77959840}, { 8828452, 77771748}, { 8812025, 77688113}, { 8733303, 77287329}, { 8744431, 77274990}, 
+		{ 8786674, 77228142}, { 8770800, 77179143}, { 8746495, 77100409}, { 8709758, 76981397}, { 8765710, 76725562}, { 8780763, 76703647}, { 8821796, 76643902}, { 9050198, 76667553}, { 9430163, 76706910}, { 9505621, 76721216}, { 9535183, 76740071}, 
+		{ 9561982, 76753134}, { 11021709, 77681521}, { 11271938, 77809531}, { 11740477, 78049225}, { 11713323, 77940287}, { 11500961, 77088300}, { 11491445, 77055518}, { 11468672, 76977103}, { 11007894, 75454998}, { 10625858, 74342820}, 
+		{ 10581531, 74223613}, { 10547931, 74133250}, { 9872558, 72487409}, { 9785055, 72279833}, { 9735127, 72161397}, { 9661531, 72007947}, { 9614591, 71910070}, { 9234200, 71112437}, { 9147114, 70727104}, { 9142261, 70702843}, { 9138267, 70682891}, 
+		{ 9286224, 70443224}, { 9461343, 70247284}, { 9556416, 70162672}, { 9625168, 70101485}, { 9435737, 69811425}, { 9287394, 69584273}, { 8757085, 68530695}, { 8673850, 68365333}, { 8445942, 67877601}, { 8187617, 67187177}, { 8139627, 67039434}, 
+		{ 7937861, 66234567}, { 7892565, 65909655}, { 7845288, 65439718}, { 7844011, 65310767}, { 7823103, 65136343}, { 7778117, 64761067}, { 7716333, 64313964}, { 7705694, 64124356}, { 7687717, 63803945}, { 7701643, 63790152}, { 7718011, 63773943}, 
+		{ 7758186, 63752036}, { 7729172, 63586572}, { 7697769, 63407488}, { 7779619, 63146399}, { 7790119, 63132497}, { 7857734, 63042993}, { 7899799, 63053366}, { 8115923, 63106666}, { 8464711, 63240292}, { 8677072, 63398904}, { 8767176, 63477143}, 
+		{ 8977927, 63660143}, { 9421383, 64100703}, { 9785048, 64413088}, { 9975436, 64589567}, { 10286420, 64877827}, { 11014721, 65410888}, { 11115862, 65482249}, { 11327524, 65631599}, { 11395991, 65675856}, { 11535890, 65766274}, { 12026448, 66109919}, 
+		{ 12502690, 66343355}, { 12786634, 66472769}, { 13164960, 66645193}, { 13207596, 66564001}, { 13256756, 66470394}, { 13640736, 65570500}, { 13683003, 65454507}, { 13718537, 65356988}, { 13735231, 65270567}, { 13747424, 65207437}, 
+		{ 13863686, 64629409}, { 13875328, 64496043}, { 13887975, 64351165}, { 13957488, 63607260}, { 13950883, 63386188}, { 13943973, 63154947}, { 13895952, 62476120}, { 13876483, 62262044}, { 13859838, 62079009}, { 13859584, 62074662}, 
+		{ 13859582, 62065658}, { 13859483, 61971042}, { 13862761, 55222623}, { 13815791, 55212684}, { 13617475, 55174296}, { 13379849, 55128299}, { 13200660, 55067043}, { 13117648, 55038667}, { 12798922, 54907256}, { 12743350, 54730557}, 
+		{ 12719703, 54655364}, { 12656225, 54324243}, { 12632418, 53676660}, { 12625539, 53489551}, { 12652785, 53052852}, { 12782795, 52820186}, { 12846930, 52705411}, { 13041220, 52491209}, { 13143647, 52409064}, { 13187810, 52373646}, 
+		{ 13354789, 52319639}, { 13381838, 52313108}, { 13407786, 52306845}, { 13609096, 52308186}, { 13798532, 52309451}, { 14794521, 52294618}, { 15549961, 52336594}, { 16050147, 52311338}, { 16209513, 52303295}, { 16312325, 52297439}, 
+		{ 16369590, 51869307}, { 16340473, 51576398}, { 16331091, 51482008}, { 16316170, 51377054}, { 16241360, 51186578}, { 16186688, 51047373}, { 16076915, 50725256}, { 16093629, 50461603}, { 16098435, 50385771}, { 16109774, 50333994}, 
+		{ 16208639, 50141731}, { 16271132, 50020206}, { 16284775, 49997056}, { 16295310, 49985147}, { 16360397, 49947770}, { 16432796, 49916484}, { 16999910, 49671395}, { 17079341, 49631019}, { 17221011, 49559013}, { 17356128, 49546264}, 
+		{ 17369996, 49528116}, { 17426993, 49502498}, { 17530282, 49456075}, { 17342293, 49148088}, { 17284381, 49008875}, { 17254026, 48935905}, { 17357436, 48625105}, { 17422365, 48429965}, { 17423796, 48426977}, { 17601162, 48056939}, 
+		{ 17599241, 47980228}, { 17595410, 47827198}, { 17579402, 47751708}, { 17538195, 47557388}, { 17400788, 46598168}, { 17023471, 46464319}, { 16973301, 46446494}, { 16812540, 46389386}, { 16673736, 46329440}, { 16319654, 46176525}, 
+		{ 15950663, 46003440}, { 15838028, 45939836}, { 15697899, 45836427}, { 15289766, 45502367}, { 15260072, 45476441}, { 14999104, 45248614}, { 14962927, 45210840}, { 14722491, 44959778}, { 14678301, 44921783}, { 14404868, 44686698}, 
+		{ 14020130, 44298671}, { 13905758, 44155324}, { 13566066, 43648328}, { 13163266, 43047144}, { 13102631, 42937239}, { 13070977, 42862998}, { 12945977, 42560557}, { 12902489, 42448510}, { 12696099, 41916758}, { 12684650, 41857975}, 
+		{ 12656516, 41713516}, { 12557005, 40938961}, { 12554067, 40837978}, { 12550435, 40713161}, { 12562692, 40535359}, { 12575839, 40344643}, { 12609216, 40034504}, { 12660395, 39915667}, { 12708691, 39803526}, { 12798899, 39599814}, 
+		{ 12938906, 39372986}, { 12995589, 39281154}, { 13232289, 39007147}, { 13498241, 38725717}, { 13591444, 38550048}, { 13628611, 38480001}, { 13631794, 38446522}, { 13586786, 38388985}, { 13507530, 38236091}, { 13096257, 38028857}, 
+		{ 12821362, 37838492}, { 12551686, 37651741}, { 12445887, 37503612}, { 12369283, 37396362}, { 12264258, 37242462}, { 12195026, 37044172}, { 12148552, 36863589}, { 12101329, 36680088}, { 12142095, 35348959}, { 12144651, 35291418}, 
+		{ 12162788, 34883134}, { 12163706, 34850506}, { 12168637, 34675334}, { 12163420, 34644423}, { 12134883, 34475307}, { 12106311, 33932082}, { 12095021, 33476333}, { 12094122, 33057779}, { 12092211, 32168031}, { 12100800, 31962352}, 
+		{ 12107580, 31800023}, { 12116077, 31640101}, { 12122543, 31518406}, { 12193613, 31111725}, { 12255946, 30755035}, { 12655685, 28642673}, { 12654000, 28322388}, { 12689137, 28120452}, { 12708722, 28007885}, { 12692342, 27740702}, 
+		{ 12770201, 27316837}, { 12810004, 27100162}, { 12822406, 26990057}, { 12840969, 26876333}, { 12930142, 26507364}, { 13006294, 26192274}, { 13140275, 25812749}, { 13171909, 25737294}, { 13213594, 25637871}, { 13513395, 24982223}, 
+		{ 13564918, 24904642}, { 13614340, 24830229}, { 13673478, 24765245}, { 13723561, 24710211}, { 13790283, 24595233}, { 13857122, 24480057}, { 14153860, 24116007}, { 14231993, 24020147}, { 14248273, 23981550}, { 14451243, 23786195}, 
+		{ 14602942, 23651634}, { 14684407, 23579375}, { 15221344, 23339532}, { 15255414, 23324310}, { 15480802, 23178412}, { 15646843, 23091400}, { 16018697, 22744059}, { 16456749, 22567685}, { 16708674, 22466255}, { 16837697, 22410158}, 
+		{ 17154392, 22190832}, { 17069931, 22106918}, { 17007737, 21985244}, { 16978925, 21928875}, { 17036320, 21826992}, { 17212750, 21670157}, { 17298093, 21594293}, { 17451145, 21457485}, { 17530883, 21256458}, { 17541075, 21230767}, 
+		{ 17549886, 21207629}, { 17244063, 20372250}, { 17209346, 20248411}, { 17092010, 20089995}, { 17023648, 19955801}, { 16984483, 19912896}, { 16834254, 19784836}, { 16625524, 19606905}, { 16620983, 19603024}, { 16616582, 19597241}, 
+		{ 16614255, 19589014}, { 16578856, 19463898}, { 16588025, 19439937}, { 16595650, 19420015}, { 16602627, 19365704}, { 16608518, 19319848}, { 16694764, 19210381}, { 16784442, 19096556}, { 16461235, 17851161}, { 16421291, 17669728}, 
+		{ 16359955, 17616552}, { 16304854, 17528237}, { 16266671, 17467038}, { 16001330, 17343372}, { 15927109, 17308781}, { 15828509, 17248124}, { 15766385, 17190011}, { 15678175, 17097940}, { 15629868, 17047518}, { 15678592, 16534350}, 
+		{ 15695434, 16356965}, { 15704034, 16303332}, { 15705308, 16269732}, { 15725443, 15743784}, { 15808595, 15332260}, { 15821377, 15312568}, { 15838901, 15285580}, { 15993537, 15201723}, { 16119571, 15175593}, { 16189683, 15163592}, 
+		{ 16237347, 15155438}, { 16508759, 15159065}, { 16375757, 14977910}, { 16282021, 14850635}, { 15510709, 13877187}, { 15342882, 13710959}, { 15237532, 13606608}, { 14831965, 13239743}, { 14581428, 13013122}, { 14293147, 12740902}, 
+		{ 14190984, 12660109}, { 13669460, 12247703}, { 12564414, 11331695}, { 12487187, 11271158}, { 12046686, 10925925}, { 11871179, 10835479}, { 11582487, 10686699}, { 11523291, 10654160}, { 11396348, 10324251}, { 11575096, 9791088}, 
+		{ 11656410, 9657529}, { 11694903, 9594301}, { 12154341, 8957487}, { 12327404, 8717611}, { 12920992, 7861977}, { 13163209, 7541046}, { 13299428, 7360558}, { 13534727, 7094968}, { 13607608, 7012705}, { 14344532, 6120949}, { 15087045, 5393680}, 
+		{ 15307430, 5177820}, { 15930737, 4553097}, { 16730116, 3841678}, { 17107544, 3505773}, { 17287251, 3346015}, { 17407773, 3251557}, { 17762201, 2970942}, { 18238970, 2593464}, { 18584923, 2367852}, { 18697829, 2294226}, { 18997703, 2084694}, 
+		{ 19253265, 1922140}, { 19413044, 1820512}, { 20082389, 1425058}, { 21018405, 914454}, { 21306702, 757182}, { 21909855, 426548}, { 22232009, 276063}, { 22432844, 180461}, { 22572399, 114027}, { 22900298, 67093}
+	};
+	out.holes.emplace_back(Slic3r::Points( {
+		{ 28812659, 51882256}, { 28813904, 51895244}, { 28807002, 51890550}, { 28850702, 52059657}, { 28856299, 52123368}, { 29045593, 52135332}, { 29004080, 52024610}, { 28932623, 51976002}, { 29332407, 51880142}, { 29334099, 51804647}, 
+		{ 29252306, 51781113}, { 29155613, 51753292}, { 28890648, 51728889}, { 28797131, 51720277}
+	} ));
+	return out;
+}
+
 SCENARIO("Elephant foot compensation", "[ElephantFoot]") {
 
+	GIVEN("Contour with hole") {
+		ExPolygon expoly =  contour_with_hole();
+		WHEN("Compensated") {
+			// Elephant foot compensation shall not pinch off bits from this contour.
+			ExPolygon expoly_compensated = elephant_foot_compensation(expoly, Flow(0.419999987f, 0.2f, 0.4f, false), 0.2f);
+#ifdef TESTS_EXPORT_SVGS
+			SVG::export_expolygons(debug_out_path("elephant_foot_compensation_with_hole.svg").c_str(),
+				{ { { expoly },             { "gray", "black", "blue", coord_t(scale_(0.02)), 0.5f, "black", coord_t(scale_(0.05)) } },
+				  { { expoly_compensated }, { "gray", "black", "blue", coord_t(scale_(0.02)), 0.5f, "black", coord_t(scale_(0.05)) } } });
+#endif /* TESTS_EXPORT_SVGS */
+            THEN("area of the compensated polygon is smaller") {
+                REQUIRE(expoly_compensated.area() < expoly.area());
+            }
+		}
+	}
+
 	GIVEN("Tiny contour") {
 		ExPolygon expoly({ { 133382606, 94912473 }, { 134232493, 95001115 }, { 133783926, 95159440 }, { 133441897, 95180666 }, { 133408242, 95191984 }, { 133339012, 95166830 }, { 132991642, 95011087 }, { 133206549, 94908304 } });
 		WHEN("Compensated") {