[geos-commits] [SCM] GEOS branch master updated. 6bac4f45e94f8e18409803b17eb306dd94fa065a

git at osgeo.org git at osgeo.org
Mon Sep 16 14:10:33 PDT 2019


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GEOS".

The branch, master has been updated
       via  6bac4f45e94f8e18409803b17eb306dd94fa065a (commit)
      from  9e79f3db1f677feb0309ddae8f900cf0c38f971e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 6bac4f45e94f8e18409803b17eb306dd94fa065a
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date:   Mon Sep 16 14:07:33 2019 -0700

    Port JTS improvements to cascaded union.
    New approach to overlap handling, to deal with robustness issues while preserving more performance than the old GEOS fix.
    Add in fallback to buffer(0) when unary union fails, for more fault tolerance on hard cases.
    Apply some const correctness features when building geometries from vector<const *Geometry>, as many constructors must do (from @dbaston)
    
    https://github.com/locationtech/jts/pull/470
    https://github.com/locationtech/jts/pull/429

diff --git a/NEWS b/NEWS
index 2e4ebbf..b3532bb 100644
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,7 @@ Changes in 3.8.0
     (Dan Baston)
   - Improve robustness of Delaunay triangulations (Paul Ramsey, Martin Davis)
   - Improve overlay performance (Paul Ramsey)
+  - Improve cascaded union performance (Paul Ramsey, Martin Davis)
 
 
 Changes in 3.7.2
diff --git a/doc/example.cpp b/doc/example.cpp
index 9d5ad07..25fdfdf 100644
--- a/doc/example.cpp
+++ b/doc/example.cpp
@@ -73,7 +73,7 @@ using geos::util::IllegalArgumentException;
 
 
 // Prototypes
-void wkt_print_geoms(vector<Geometry*>* geoms);
+void wkt_print_geoms(vector<const Geometry*>* geoms);
 
 
 // This object will be used to construct our geometries.
@@ -93,7 +93,7 @@ GeometryFactory::Ptr global_factory;
 //	- remove debugging lines (on stream state)
 //
 void
-WKBtest(vector<Geometry*>* geoms)
+WKBtest(vector<const Geometry*>* geoms)
 {
     stringstream s(ios_base::binary | ios_base::in | ios_base::out);
     io::WKBReader wkbReader(*global_factory);
@@ -107,7 +107,7 @@ WKBtest(vector<Geometry*>* geoms)
 
     size_t ngeoms = geoms->size();
     for(unsigned int i = 0; i < ngeoms; ++i) {
-        Geometry* gin = (*geoms)[i];
+        const Geometry* gin = (*geoms)[i];
 
 #if DEBUG_STREAM_STATE
         cout << "State of stream before WRITE: ";
@@ -171,7 +171,7 @@ WKBtest(vector<Geometry*>* geoms)
              " fail:" << s.fail() << endl;
 #endif
 
-        gin->normalize();
+        const_cast<Geometry*>(gin)->normalize();
         gout->normalize();
         int failed = gin->compareTo(gout);
         if(failed) {
@@ -202,7 +202,7 @@ WKBtest(vector<Geometry*>* geoms)
 // format to stdout. As a side-effect, will test WKB
 // output and input, using the WKBtest function.
 void
-wkt_print_geoms(vector<Geometry*>* geoms)
+wkt_print_geoms(vector<const Geometry*>* geoms)
 {
     WKBtest(geoms); // test WKB parser
 
@@ -320,7 +320,7 @@ create_square_polygon(double xoffset, double yoffset, double side)
 // containing copies of all Geometries in given vector.
 //
 GeometryCollection*
-create_simple_collection(vector<Geometry*>* geoms)
+create_simple_collection(vector<const Geometry*>* geoms)
 {
     return global_factory->createGeometryCollection(*geoms);
     // if you wanted to transfer ownership of vector end
@@ -408,8 +408,8 @@ create_sinestar(double cx, double cy, double size, int nArms, double armLenRat)
 void
 do_all()
 {
-    vector<Geometry*>* geoms = new vector<Geometry*>;
-    vector<Geometry*>* newgeoms;
+    vector<const Geometry*>* geoms = new vector<const Geometry*>;
+    vector<const Geometry*>* newgeoms;
 
     // Define a precision model using 0,0 as the reference origin
     // and 2.0 as coordinates scale.
@@ -463,9 +463,9 @@ do_all()
     /////////////////////////////////////////////
 
     // Find centroid of each base geometry
-    newgeoms = new vector<Geometry*>;
+    newgeoms = new vector<const Geometry*>;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g = (*geoms)[i];
+        const Geometry* g = (*geoms)[i];
         newgeoms->push_back(g->getCentroid().release());
     }
 
@@ -483,9 +483,9 @@ do_all()
     // BUFFER
     /////////////////////////////////////////////
 
-    newgeoms = new vector<Geometry*>;
+    newgeoms = new vector<const Geometry*>;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g = (*geoms)[i];
+        const Geometry* g = (*geoms)[i];
         try {
             Geometry* g2 = g->buffer(10).release();
             newgeoms->push_back(g2);
@@ -508,9 +508,9 @@ do_all()
     /////////////////////////////////////////////
 
     // Make convex hulls of geometries
-    newgeoms = new vector<Geometry*>;
+    newgeoms = new vector<const Geometry*>;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g = (*geoms)[i];
+        const Geometry* g = (*geoms)[i];
         newgeoms->push_back(g->convexHull().release());
     }
 
@@ -547,10 +547,10 @@ do_all()
     }
     cout << endl;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         cout << "      [" << i << "]\t";
         for(unsigned int j = 0; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 if(g1->disjoint(g2)) {
                     cout << " 1\t";
@@ -581,10 +581,10 @@ do_all()
     }
     cout << endl;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         cout << "      [" << i << "]\t";
         for(unsigned int j = 0; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 if(g1->touches(g2)) {
                     cout << " 1\t";
@@ -615,10 +615,10 @@ do_all()
     }
     cout << endl;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         cout << "      [" << i << "]\t";
         for(unsigned int j = 0; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 if(g1->intersects(g2)) {
                     cout << " 1\t";
@@ -649,10 +649,10 @@ do_all()
     }
     cout << endl;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         cout << "      [" << i << "]\t";
         for(unsigned int j = 0; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 if(g1->crosses(g2)) {
                     cout << " 1\t";
@@ -683,10 +683,10 @@ do_all()
     }
     cout << endl;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         cout << "      [" << i << "]\t";
         for(unsigned int j = 0; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 if(g1->within(g2)) {
                     cout << " 1\t";
@@ -717,10 +717,10 @@ do_all()
     }
     cout << endl;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         cout << "      [" << i << "]\t";
         for(unsigned int j = 0; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 if(g1->contains(g2)) {
                     cout << " 1\t";
@@ -751,10 +751,10 @@ do_all()
     }
     cout << endl;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         cout << "      [" << i << "]\t";
         for(unsigned int j = 0; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 if(g1->overlaps(g2)) {
                     cout << " 1\t";
@@ -785,10 +785,10 @@ do_all()
     }
     cout << endl;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         cout << "      [" << i << "]\t";
         for(unsigned int j = 0; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 // second argument is intersectionPattern
                 string pattern = "212101212";
@@ -824,10 +824,10 @@ do_all()
     }
     cout << endl;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         cout << "      [" << i << "]\t";
         for(unsigned int j = 0; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 if(g1->equals(g2)) {
                     cout << " 1\t";
@@ -858,10 +858,10 @@ do_all()
     }
     cout << endl;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         cout << "      [" << i << "]\t";
         for(unsigned int j = 0; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 // second argument is a tolerance
                 if(g1->equalsExact(g2, 0.5)) {
@@ -893,10 +893,10 @@ do_all()
     }
     cout << endl;
     for(unsigned int i = 0; i < geoms->size(); i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         cout << "      [" << i << "]\t";
         for(unsigned int j = 0; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 // second argument is the distance
                 if(g1->isWithinDistance(g2, 2)) {
@@ -935,11 +935,11 @@ do_all()
     /////////////////////////////////////////////
 
     // Make unions of all geoms
-    newgeoms = new vector<Geometry*>;
+    newgeoms = new vector<const Geometry*>;
     for(unsigned int i = 0; i < geoms->size() - 1; i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         for(unsigned int j = i + 1; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 Geometry* g3 = g1->Union(g2).release();
                 newgeoms->push_back(g3);
@@ -969,12 +969,12 @@ do_all()
     // INTERSECTION
     /////////////////////////////////////////////
 
-    // Compute intersection of adhiacent geometries
-    newgeoms = new vector<Geometry*>;
+    // Compute intersection of adjacent geometries
+    newgeoms = new vector<const Geometry*>;
     for(unsigned int i = 0; i < geoms->size() - 1; i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         for(unsigned int j = i + 1; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 Geometry* g3 = g1->intersection(g2).release();
                 newgeoms->push_back(g3);
@@ -1003,11 +1003,11 @@ do_all()
     /////////////////////////////////////////////
 
     // Compute difference of adhiacent geometries
-    newgeoms = new vector<Geometry*>;
+    newgeoms = new vector<const Geometry*>;
     for(unsigned int i = 0; i < geoms->size() - 1; i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         for(unsigned int j = i + 1; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 Geometry* g3 = g1->difference(g2).release();
                 newgeoms->push_back(g3);
@@ -1036,11 +1036,11 @@ do_all()
     /////////////////////////////////////////////
 
     // Compute symmetric difference of adhiacent geometries
-    newgeoms = new vector<Geometry*>;
+    newgeoms = new vector<const Geometry*>;
     for(unsigned int i = 0; i < geoms->size() - 1; i++) {
-        Geometry* g1 = (*geoms)[i];
+        const Geometry* g1 = (*geoms)[i];
         for(unsigned int j = i + 1; j < geoms->size(); j++) {
-            Geometry* g2 = (*geoms)[j];
+            const Geometry* g2 = (*geoms)[j];
             try {
                 Geometry* g3 = g1->symDifference(g2).release();
                 newgeoms->push_back(g3);
@@ -1074,7 +1074,7 @@ do_all()
     LineMerger lm;
     lm.add(geoms);
     vector<LineString*>* mls = lm.getMergedLineStrings();
-    newgeoms = new vector<Geometry*>;
+    newgeoms = new vector<const Geometry*>;
     for(unsigned int i = 0; i < mls->size(); i++) {
         newgeoms->push_back((*mls)[i]);
     }
@@ -1099,7 +1099,7 @@ do_all()
     Polygonizer plgnzr;
     plgnzr.add(geoms);
     auto polys = plgnzr.getPolygons();
-    newgeoms = new vector<Geometry*>;
+    newgeoms = new vector<const Geometry*>;
     for(unsigned int i = 0; i < polys->size(); i++) {
         newgeoms->push_back((*polys)[i].release());
     }
diff --git a/include/geos/geom/GeometryFactory.h b/include/geos/geom/GeometryFactory.h
index fb9f206..4fc4760 100644
--- a/include/geos/geom/GeometryFactory.h
+++ b/include/geos/geom/GeometryFactory.h
@@ -188,7 +188,7 @@ public:
 
     /// Constructs a GeometryCollection with a deep-copy of args
     GeometryCollection* createGeometryCollection(
-        const std::vector<Geometry*>& newGeoms) const;
+        const std::vector<const Geometry*>& newGeoms) const;
 
     /// Construct an EMPTY MultiLineString
     MultiLineString* createMultiLineString() const;
@@ -199,7 +199,7 @@ public:
 
     /// Construct a MultiLineString with a deep-copy of given arguments
     MultiLineString* createMultiLineString(
-        const std::vector<Geometry*>& fromLines) const;
+        const std::vector<const Geometry*>& fromLines) const;
 
     std::unique_ptr<MultiLineString> createMultiLineString(
             std::vector<std::unique_ptr<LineString>> && fromLines) const;
@@ -215,7 +215,7 @@ public:
 
     /// Construct a MultiPolygon with a deep-copy of given arguments
     MultiPolygon* createMultiPolygon(
-        const std::vector<Geometry*>& fromPolys) const;
+        const std::vector<const Geometry*>& fromPolys) const;
 
     std::unique_ptr<MultiPolygon> createMultiPolygon(
         std::vector<std::unique_ptr<Polygon>> && fromPolys) const;
@@ -248,7 +248,7 @@ public:
 
     /// Construct a MultiPoint with a deep-copy of given arguments
     MultiPoint* createMultiPoint(
-        const std::vector<Geometry*>& fromPoints) const;
+        const std::vector<const Geometry*>& fromPoints) const;
 
     /// \brief
     /// Construct a MultiPoint containing a Point geometry
@@ -368,10 +368,10 @@ public:
         // Until we tweak all the createMulti* interfaces
         // to support taking iterators we'll have to build
         // a custom vector here.
-        std::vector<Geometry*> fromGeoms;
+        std::vector<const Geometry*> fromGeoms;
         for(T i = from; i != toofar; ++i) {
             const Geometry* g = *i;
-            fromGeoms.push_back(const_cast<Geometry*>(g));
+            fromGeoms.push_back(g);
         }
 
 
@@ -402,7 +402,7 @@ public:
      * The difference is that this version will copy needed data
      * leaving ownership to the caller.
      */
-    Geometry* buildGeometry(const std::vector<Geometry*>& geoms) const;
+    Geometry* buildGeometry(const std::vector<const Geometry*>& geoms) const;
 
     int getSRID() const;
 
diff --git a/include/geos/geom/util/GeometryCombiner.h b/include/geos/geom/util/GeometryCombiner.h
index 4ed3b8e..3faf21b 100644
--- a/include/geos/geom/util/GeometryCombiner.h
+++ b/include/geos/geom/util/GeometryCombiner.h
@@ -54,7 +54,8 @@ public:
      * @param geoms the geometries to combine (ownership left to caller)
      * @return the combined geometry
      */
-    static std::unique_ptr<Geometry> combine(std::vector<Geometry*> const& geoms);
+    static std::unique_ptr<Geometry> combine(std::vector<const Geometry*> const& geoms);
+    static std::unique_ptr<Geometry> combine(std::vector<std::unique_ptr<Geometry>> const& geoms);
 
     /** \brief
      * Combines two geometries.
@@ -78,7 +79,7 @@ public:
 private:
     GeometryFactory const* geomFactory;
     bool skipEmpty;
-    std::vector<Geometry*> const& inputGeoms;
+    std::vector<const Geometry*> const& inputGeoms;
 
 public:
     /** \brief
@@ -86,7 +87,7 @@ public:
      *
      * @param geoms the geometries to combine
      */
-    GeometryCombiner(std::vector<Geometry*> const& geoms);
+    GeometryCombiner(std::vector<const Geometry*> const& geoms);
 
     /** \brief
      * Extracts the GeometryFactory used by the geometries in a collection.
@@ -94,7 +95,7 @@ public:
      * @param geoms
      * @return a GeometryFactory
      */
-    static GeometryFactory const* extractFactory(std::vector<Geometry*> const& geoms);
+    static GeometryFactory const* extractFactory(std::vector<const Geometry*> const& geoms);
 
     /** \brief
      * Computes the combination of the input geometries
@@ -105,7 +106,7 @@ public:
     std::unique_ptr<Geometry> combine();
 
 private:
-    void extractElements(Geometry* geom, std::vector<Geometry*>& elems);
+    void extractElements(const Geometry* geom, std::vector<const Geometry*>& elems);
 
     // Declare type as noncopyable
     GeometryCombiner(const GeometryCombiner& other) = delete;
diff --git a/include/geos/linearref/LinearGeometryBuilder.h b/include/geos/linearref/LinearGeometryBuilder.h
index 3201863..1761d20 100644
--- a/include/geos/linearref/LinearGeometryBuilder.h
+++ b/include/geos/linearref/LinearGeometryBuilder.h
@@ -41,7 +41,7 @@ class LinearGeometryBuilder {
 private:
     const geom::GeometryFactory* geomFact;
 
-    typedef std::vector<geom::Geometry*> GeomPtrVect;
+    typedef std::vector<const geom::Geometry*> GeomPtrVect;
 
     // Geometry elements owned by this class
     GeomPtrVect lines;
diff --git a/include/geos/operation/linemerge/LineMerger.h b/include/geos/operation/linemerge/LineMerger.h
index 69b980f..d21465b 100644
--- a/include/geos/operation/linemerge/LineMerger.h
+++ b/include/geos/operation/linemerge/LineMerger.h
@@ -110,7 +110,7 @@ public:
      * Any dimension of Geometry may be added; the constituent
      * linework will be extracted.
      */
-    void add(std::vector<geom::Geometry*>* geometries);
+    void add(std::vector<const geom::Geometry*>* geometries);
 
     /**
      * \brief
diff --git a/include/geos/operation/union/CascadedPolygonUnion.h b/include/geos/operation/union/CascadedPolygonUnion.h
index a26bd52..d823450 100644
--- a/include/geos/operation/union/CascadedPolygonUnion.h
+++ b/include/geos/operation/union/CascadedPolygonUnion.h
@@ -195,43 +195,6 @@ private:
      */
     geom::Geometry* unionSafe(geom::Geometry* g0, geom::Geometry* g1);
 
-    geom::Geometry* unionOptimized(geom::Geometry* g0, geom::Geometry* g1);
-
-    /**
-     * \brief
-     * Unions two polygonal geometries, restricting computation
-     * to the envelope intersection where possible.
-     *
-     * The case of MultiPolygons is optimized to union only
-     * the polygons which lie in the intersection of the two geometry's
-     * envelopes.
-     * Polygons outside this region can simply be combined with the union
-     * result, which is potentially much faster.
-     * This case is likely to occur often during cascaded union, and may also
-     * occur in real world data (such as unioning data for parcels on
-     * different street blocks).
-     *
-     * @param g0 a polygonal geometry
-     * @param g1 a polygonal geometry
-     * @param common the intersection of the envelopes of the inputs
-     * @return the union of the inputs
-     */
-    geom::Geometry* unionUsingEnvelopeIntersection(geom::Geometry* g0,
-            geom::Geometry* g1, geom::Envelope const& common);
-
-    geom::Geometry* extractByEnvelope(geom::Envelope const& env,
-                                      geom::Geometry* geom, std::vector<geom::Geometry*>& disjointGeoms);
-
-    void extractByEnvelope(geom::Envelope const& env,
-                           geom::Geometry* geom,
-                           std::vector<geom::Geometry*>& intersectingGeoms,
-                           std::vector<geom::Geometry*>& disjointGeoms);
-
-    void extractByEnvelope(geom::Envelope const& env,
-                           std::vector<geom::Geometry*>& sourceGeoms,
-                           std::vector<geom::Geometry*>& intersectingGeoms,
-                           std::vector<geom::Geometry*>& disjointGeoms);
-
     /**
      * Encapsulates the actual unioning of two polygonal geometries.
      *
diff --git a/include/geos/operation/union/CascadedUnion.h b/include/geos/operation/union/CascadedUnion.h
index ecfa4a7..91d3f28 100644
--- a/include/geos/operation/union/CascadedUnion.h
+++ b/include/geos/operation/union/CascadedUnion.h
@@ -180,7 +180,7 @@ private:
             geom::Geometry* g1, geom::Envelope const& common);
 
     geom::Geometry* extractByEnvelope(geom::Envelope const& env,
-                                      geom::Geometry* geom, std::vector<geom::Geometry*>& disjointGeoms);
+                                      geom::Geometry* geom, std::vector<const geom::Geometry*>& disjointGeoms);
 
     /**
      * Encapsulates the actual unioning of two polygonal geometries.
diff --git a/include/geos/operation/union/Makefile.am b/include/geos/operation/union/Makefile.am
index f99e62b..d9fc8e1 100644
--- a/include/geos/operation/union/Makefile.am
+++ b/include/geos/operation/union/Makefile.am
@@ -11,6 +11,7 @@ geos_HEADERS = \
     CascadedPolygonUnion.h \
     CascadedUnion.h \
     CoverageUnion.h \
+    OverlapUnion.h \
     GeometryListHolder.h \
     PointGeometryUnion.h \
     UnaryUnionOp.h
diff --git a/include/geos/operation/union/OverlapUnion.h b/include/geos/operation/union/OverlapUnion.h
new file mode 100644
index 0000000..c3f35b1
--- /dev/null
+++ b/include/geos/operation/union/OverlapUnion.h
@@ -0,0 +1,126 @@
+/**********************************************************************
+ *
+ * GEOS - Geometry Engine Open Source
+ * http://trac.osgeo.org/geos
+ *
+ * Copyright (C) 2011 Sandro Santilli <strk at kbt.io>
+ *
+ * This is free software; you can redistribute and/or modify it under
+ * the terms of the GNU Lesser General Public Licence as published
+ * by the Free Software Foundation.
+ * See the COPYING file for more information.
+ *
+ **********************************************************************
+ *
+ * Last port: ORIGINAL WORK, generalization of CascadedPolygonUnion
+ *
+ **********************************************************************/
+
+#ifndef GEOS_OP_UNION_OVERLAPUNION_H
+#define GEOS_OP_UNION_OVERLAPUNION_H
+
+#include <geos/export.h>
+
+#include <vector>
+#include <algorithm>
+#include <unordered_set>
+
+#include <geos/geom/Geometry.h>
+
+// Forward declarations
+namespace geos {
+namespace geom {
+class Envelope;
+class LineSegment;
+}
+}
+
+namespace geos {
+namespace operation { // geos::operation
+namespace geounion {  // geos::operation::geounion
+
+/**
+ * Unions MultiPolygons efficiently by
+ * using full topological union only for polygons which may overlap
+ * by virtue of intersecting the common area of the inputs.
+ * Other polygons are simply combined with the union result,
+ * which is much more performant.
+ * <p>
+ * This situation is likely to occur during cascaded polygon union,
+ * since the partitioning of polygons is done heuristically
+ * and thus may group disjoint polygons which can lie far apart.
+ * It may also occur in real world data which contains many disjoint polygons
+ * (e.g. polygons representing parcels on different street blocks).
+ * <h2>Algorithm</h2>
+ * The overlap region is determined as the common envelope of intersection.
+ * The input polygons are partitioned into two sets:
+ * <ul>
+ * <li>Overlapping: Polygons which intersect the overlap region, and thus potentially overlap each other
+ * <li>Disjoint: Polygons which are disjoint from (lie wholly outside) the overlap region
+ * </ul>
+ * The Overlapping set is fully unioned, and then combined with the Disjoint set.
+ * Performing a simple combine works because
+ * the disjoint polygons do not interact with each
+ * other (since the inputs are valid MultiPolygons).
+ * They also do not interact with the Overlapping polygons,
+ * since they are outside their envelope.
+ *
+ * <h2>Verification</h2>
+ * In the general case the Overlapping set of polygons will
+ * extend beyond the overlap envelope.  This means that the union result
+ * will extend beyond the overlap region.
+ * There is a small chance that the topological
+ * union of the overlap region will shift the result linework enough
+ * that the result geometry intersects one of the Disjoint geometries.
+ * This case is detected and if it occurs
+ * is remedied by falling back to performing a full union of the original inputs.
+ * Detection is done by a fairly efficient comparison of edge segments which
+ * extend beyond the overlap region.  If any segments have changed
+ * then there is a risk of introduced intersections, and full union is performed.
+ * <p>
+ * This situation has not been observed in JTS using floating precision,
+ * but it could happen due to snapping.  It has been observed
+ * in other APIs (e.g. GEOS) due to more aggressive snapping.
+ * And it will be more likely to happen if a snap-rounding overlay is used.
+ *
+ * @author mbdavis
+ *
+ */
+
+class GEOS_DLL OverlapUnion {
+
+public:
+
+    OverlapUnion(const geom::Geometry* p_g0, const geom::Geometry* p_g1)
+        : g0(p_g0), g1(p_g1)
+    {
+        geomFactory = g0->getFactory();
+        isUnionSafe = false;
+    };
+
+    std::unique_ptr<geom::Geometry> doUnion();
+
+private:
+
+    const geom::GeometryFactory* geomFactory;
+    const geom::Geometry* g0;
+    const geom::Geometry* g1;
+    bool isUnionSafe;
+
+    geom::Envelope overlapEnvelope(const geom::Geometry* geom0, const geom::Geometry* geom1);
+    std::unique_ptr<geom::Geometry> extractByEnvelope(const geom::Envelope& env, const geom::Geometry* geom, std::vector<std::unique_ptr<geom::Geometry>>& disjointGeoms);
+    std::unique_ptr<geom::Geometry> combine(std::unique_ptr<geom::Geometry>& unionGeom, std::vector<std::unique_ptr<geom::Geometry>>& disjointPolys);
+    std::unique_ptr<geom::Geometry> unionFull(const geom::Geometry* geom0, const geom::Geometry* geom1);
+    std::unique_ptr<geom::Geometry> unionBuffer(const geom::Geometry* geom0, const geom::Geometry* geom1);
+    bool isBorderSegmentsSame(const geom::Geometry* result, const geom::Envelope& env);
+    bool isEqual(std::vector<geom::LineSegment*>& segs0, std::vector<geom::LineSegment*>& segs1);
+    std::vector<geom::LineSegment*> extractBorderSegments(const geom::Geometry* geom0, const geom::Geometry* geom1, const geom::Envelope& env);
+    void extractBorderSegments(const geom::Geometry* geom, const geom::Envelope& penv, std::vector<geom::LineSegment*>& psegs);
+
+};
+
+} // namespace geos::operation::union
+} // namespace geos::operation
+} // namespace geos
+
+#endif
diff --git a/src/geom/GeometryFactory.cpp b/src/geom/GeometryFactory.cpp
index 9cc6961..636607d 100644
--- a/src/geom/GeometryFactory.cpp
+++ b/src/geom/GeometryFactory.cpp
@@ -348,7 +348,7 @@ const
 
 /*public*/
 MultiLineString*
-GeometryFactory::createMultiLineString(const std::vector<Geometry*>& fromLines)
+GeometryFactory::createMultiLineString(const std::vector<const Geometry*>& fromLines)
 const
 {
     std::vector<std::unique_ptr<Geometry>> newGeoms(fromLines.size());
@@ -407,7 +407,7 @@ GeometryFactory::createGeometryCollection(std::vector<std::unique_ptr<geos::geom
 
 /*public*/
 GeometryCollection*
-GeometryFactory::createGeometryCollection(const std::vector<Geometry*>& fromGeoms) const
+GeometryFactory::createGeometryCollection(const std::vector<const Geometry*>& fromGeoms) const
 {
     std::vector<std::unique_ptr<Geometry>> newGeoms(fromGeoms.size());
 
@@ -448,7 +448,7 @@ GeometryFactory::createMultiPolygon(std::vector<std::unique_ptr<Geometry>> && ne
 
 /*public*/
 MultiPolygon*
-GeometryFactory::createMultiPolygon(const std::vector<Geometry*>& fromPolys) const
+GeometryFactory::createMultiPolygon(const std::vector<const Geometry*>& fromPolys) const
 {
     std::vector<std::unique_ptr<Geometry>> newGeoms(fromPolys.size());
 
@@ -512,7 +512,7 @@ GeometryFactory::createMultiPoint(std::vector<std::unique_ptr<Geometry>> && newP
 
 /*public*/
 MultiPoint*
-GeometryFactory::createMultiPoint(const vector<Geometry*>& fromPoints) const
+GeometryFactory::createMultiPoint(const vector<const Geometry*>& fromPoints) const
 {
     std::vector<std::unique_ptr<Geometry>> newGeoms(fromPoints.size());
     for(size_t i = 0; i < fromPoints.size(); i++) {
@@ -704,7 +704,7 @@ GeometryFactory::buildGeometry(vector<Geometry*>* newGeoms) const
 
 /*public*/
 Geometry*
-GeometryFactory::buildGeometry(const vector<Geometry*>& fromGeoms) const
+GeometryFactory::buildGeometry(const vector<const Geometry*>& fromGeoms) const
 {
     size_t geomsSize = fromGeoms.size();
     if(geomsSize == 0) {
diff --git a/src/geom/util/GeometryCombiner.cpp b/src/geom/util/GeometryCombiner.cpp
index f174c51..949e21f 100644
--- a/src/geom/util/GeometryCombiner.cpp
+++ b/src/geom/util/GeometryCombiner.cpp
@@ -26,7 +26,18 @@ namespace geom { // geos.geom
 namespace util { // geos.geom.util
 
 std::unique_ptr<Geometry>
-GeometryCombiner::combine(std::vector<Geometry*> const& geoms)
+GeometryCombiner::combine(std::vector<std::unique_ptr<Geometry>> const& geoms)
+{
+    std::vector<const Geometry*> geomptrs;
+    for(const auto& g : geoms) {
+        geomptrs.push_back(g.get());
+    }
+    GeometryCombiner combiner(geomptrs);
+    return combiner.combine();
+}
+
+std::unique_ptr<Geometry>
+GeometryCombiner::combine(std::vector<const Geometry*> const& geoms)
 {
     GeometryCombiner combiner(geoms);
     return combiner.combine();
@@ -35,9 +46,9 @@ GeometryCombiner::combine(std::vector<Geometry*> const& geoms)
 std::unique_ptr<Geometry>
 GeometryCombiner::combine(const Geometry* g0, const Geometry* g1)
 {
-    std::vector<Geometry*> geoms;
-    geoms.push_back(const_cast<Geometry*>(g0));
-    geoms.push_back(const_cast<Geometry*>(g1));
+    std::vector<const Geometry*> geoms;
+    geoms.push_back(g0);
+    geoms.push_back(g1);
 
     GeometryCombiner combiner(geoms);
     return combiner.combine();
@@ -47,22 +58,22 @@ std::unique_ptr<Geometry>
 GeometryCombiner::combine(const Geometry* g0, const Geometry* g1,
                           const Geometry* g2)
 {
-    std::vector<Geometry*> geoms;
-    geoms.push_back(const_cast<Geometry*>(g0));
-    geoms.push_back(const_cast<Geometry*>(g1));
-    geoms.push_back(const_cast<Geometry*>(g2));
+    std::vector<const Geometry*> geoms;
+    geoms.push_back(g0);
+    geoms.push_back(g1);
+    geoms.push_back(g2);
 
     GeometryCombiner combiner(geoms);
     return combiner.combine();
 }
 
-GeometryCombiner::GeometryCombiner(std::vector<Geometry*> const& geoms)
+GeometryCombiner::GeometryCombiner(std::vector<const Geometry*> const& geoms)
     : geomFactory(extractFactory(geoms)), skipEmpty(false), inputGeoms(geoms)
 {
 }
 
 GeometryFactory const*
-GeometryCombiner::extractFactory(std::vector<Geometry*> const& geoms)
+GeometryCombiner::extractFactory(std::vector<const Geometry*> const& geoms)
 {
     return geoms.empty() ? nullptr : geoms.front()->getFactory();
 }
@@ -70,7 +81,7 @@ GeometryCombiner::extractFactory(std::vector<Geometry*> const& geoms)
 std::unique_ptr<Geometry>
 GeometryCombiner::combine()
 {
-    std::vector<Geometry*> elems;
+    std::vector<const Geometry*> elems;
 
     for(const auto& geom : inputGeoms) {
         extractElements(geom, elems);
@@ -88,14 +99,14 @@ GeometryCombiner::combine()
 }
 
 void
-GeometryCombiner::extractElements(Geometry* geom, std::vector<Geometry*>& elems)
+GeometryCombiner::extractElements(const Geometry* geom, std::vector<const Geometry*>& elems)
 {
     if(geom == nullptr) {
         return;
     }
 
     for(std::size_t i = 0; i < geom->getNumGeometries(); ++i) {
-        Geometry* elemGeom = const_cast<Geometry*>(geom->getGeometryN(i));
+        const Geometry* elemGeom = geom->getGeometryN(i);
         if(skipEmpty && elemGeom->isEmpty()) {
             continue;
         }
diff --git a/src/operation/buffer/BufferBuilder.cpp b/src/operation/buffer/BufferBuilder.cpp
index e7f2b3c..dfe7951 100644
--- a/src/operation/buffer/BufferBuilder.cpp
+++ b/src/operation/buffer/BufferBuilder.cpp
@@ -93,7 +93,7 @@ convertSegStrings(const GeometryFactory* fact, Iterator it, Iterator et)
         lines.push_back(line);
         ++it;
     }
-    return std::unique_ptr<Geometry>(fact->buildGeometry(lines));
+    return std::unique_ptr<Geometry>(fact->buildGeometry(lines.begin(), lines.end()));
 }
 
 }
diff --git a/src/operation/linemerge/LineMerger.cpp b/src/operation/linemerge/LineMerger.cpp
index c3e3388..a45d2f5 100644
--- a/src/operation/linemerge/LineMerger.cpp
+++ b/src/operation/linemerge/LineMerger.cpp
@@ -44,11 +44,10 @@ namespace operation { // geos.operation
 namespace linemerge { // geos.operation.linemerge
 
 void
-LineMerger::add(vector<Geometry*>* geometries)
+LineMerger::add(vector<const Geometry*>* geometries)
 {
-    for(size_t i = 0, n = geometries->size(); i < n; i++) {
-        Geometry* geometry = (*geometries)[i];
-        add(geometry);
+    for(const Geometry* g : *geometries) {
+        add(g);
     }
 }
 
diff --git a/src/operation/union/CascadedPolygonUnion.cpp b/src/operation/union/CascadedPolygonUnion.cpp
index 7016f03..44a1d32 100644
--- a/src/operation/union/CascadedPolygonUnion.cpp
+++ b/src/operation/union/CascadedPolygonUnion.cpp
@@ -19,6 +19,7 @@
  **********************************************************************/
 
 #include <geos/operation/union/CascadedPolygonUnion.h>
+#include <geos/operation/union/OverlapUnion.h>
 #include <geos/geom/Dimension.h>
 #include <geos/geom/Geometry.h>
 #include <geos/geom/GeometryFactory.h>
@@ -230,162 +231,18 @@ CascadedPolygonUnion::unionSafe(geom::Geometry* g0, geom::Geometry* g1)
         return g0->clone().release();
     }
 
-    return unionOptimized(g0, g1);
+    return unionActual(g0, g1);
 }
 
-geom::Geometry*
-CascadedPolygonUnion::unionOptimized(geom::Geometry* g0, geom::Geometry* g1)
-{
-    geom::Envelope const* g0Env = g0->getEnvelopeInternal();
-    geom::Envelope const* g1Env = g1->getEnvelopeInternal();
-
-    if(!g0Env->intersects(g1Env)) {
-        return geom::util::GeometryCombiner::combine(g0, g1).release();
-    }
-
-    if(g0->getNumGeometries() <= 1 && g1->getNumGeometries() <= 1) {
-        return unionActual(g0, g1);
-    }
-
-    geom::Envelope commonEnv;
-    g0Env->intersection(*g1Env, commonEnv);
-    return unionUsingEnvelopeIntersection(g0, g1, commonEnv);
-}
-
-/* private */
-geom::Geometry*
-CascadedPolygonUnion::unionUsingEnvelopeIntersection(geom::Geometry* g0,
-        geom::Geometry* g1, geom::Envelope const& common)
-{
-    std::vector<geom::Geometry*> disjointPolys;
-
-#if GEOS_DEBUG_CASCADED_UNION
-    check_valid(*g0, "unionUsingEnvelopeIntersection g0");
-    check_valid(*g1, "unionUsingEnvelopeIntersection g1");
-#endif
-
-    std::unique_ptr<geom::Geometry> g0Int(extractByEnvelope(common, g0, disjointPolys));
-    std::unique_ptr<geom::Geometry> g1Int(extractByEnvelope(common, g1, disjointPolys));
-
-#if GEOS_DEBUG_CASCADED_UNION
-    check_valid(*g0Int, "unionUsingEnvelopeIntersection g0Int");
-    check_valid(*g1Int, "unionUsingEnvelopeIntersection g1Int");
-#endif
-
-    std::unique_ptr<geom::Geometry> u(unionActual(g0Int.get(), g1Int.get()));
-
-#if GEOS_DEBUG_CASCADED_UNION
-    if(! check_valid(*u, "unionUsingEnvelopeIntersection unionActual return")) {
-#if GEOS_DEBUG_CASCADED_UNION_PRINT_INVALID
-        std::cerr << " union between the following is invalid"
-                  << "<a>" << std::endl
-                  << *g0Int << std::endl
-                  << "</a>" << std::endl
-                  << "<b>" << std::endl
-                  << *g1Int << std::endl
-                  << "</b>" << std::endl
-                  ;
-#endif
-    }
-#endif
-
-    if(disjointPolys.empty()) {
-        return u.release();
-    }
-
-#if GEOS_DEBUG_CASCADED_UNION
-    for(size_t i = 0; i < disjointPolys.size(); ++i) {
-        std::ostringstream os;
-        os << "dp" << i;
-        check_valid(*(disjointPolys[i]), os.str());
-    }
-#endif
-
-    // TODO: find, in disjointPolys, those which now have their
-    // environment intersect the environment of the union "u"
-    // and collect them in another vector to be unioned
-
-    std::vector<geom::Geometry*> polysOn;
-    std::vector<geom::Geometry*> polysOff;
-    geom::Envelope const* uEnv = u->getEnvelopeInternal(); // TODO: check for EMPTY ?
-    extractByEnvelope(*uEnv, disjointPolys, polysOn, polysOff);
-#if GEOS_DEBUG_CASCADED_UNION
-    std::cerr << "unionUsingEnvelopeIntersection: " << polysOn.size() << "/" << disjointPolys.size() <<
-              " polys intersect union of final thing" << std::endl;
-#endif
-
-    std::unique_ptr<geom::Geometry> ret;
-    if(polysOn.empty()) {
-        disjointPolys.push_back(u.get());
-        ret = geom::util::GeometryCombiner::combine(disjointPolys);
-    }
-    else {
-        // TODO: could be further tweaked to only union with polysOn
-        //       and combine with polysOff, but then it'll need again to
-        //       recurse in the check for disjoint/intersecting
-        ret = geom::util::GeometryCombiner::combine(disjointPolys);
-        ret.reset(unionActual(ret.get(), u.get()));
-    }
-
-#if GEOS_DEBUG_CASCADED_UNION
-    check_valid(*ret, "unionUsingEnvelopeIntersection returned geom");
-#endif
-
-    return ret.release();
-}
-
-/* private */
-void
-CascadedPolygonUnion::extractByEnvelope(geom::Envelope const& env,
-                                        std::vector<geom::Geometry*>& sourceGeoms,
-                                        std::vector<geom::Geometry*>& intersectingGeoms,
-                                        std::vector<geom::Geometry*>& disjointGeoms)
-{
-    for(std::vector<geom::Geometry*>::iterator i = sourceGeoms.begin(),
-            e = sourceGeoms.end(); i != e; ++i) {
-        geom::Geometry* elem = *i;
-        if(elem->getEnvelopeInternal()->intersects(env)) {
-            intersectingGeoms.push_back(elem);
-        }
-        else {
-            disjointGeoms.push_back(elem);
-        }
-    }
-}
-
-/* private */
-void
-CascadedPolygonUnion::extractByEnvelope(geom::Envelope const& env,
-                                        geom::Geometry* geom,
-                                        std::vector<geom::Geometry*>& intersectingGeoms,
-                                        std::vector<geom::Geometry*>& disjointGeoms)
-{
-    for(std::size_t i = 0; i < geom->getNumGeometries(); i++) {
-        geom::Geometry* elem = const_cast<geom::Geometry*>(geom->getGeometryN(i));
-        if(elem->getEnvelopeInternal()->intersects(env)) {
-            intersectingGeoms.push_back(elem);
-        }
-        else {
-            disjointGeoms.push_back(elem);
-        }
-    }
-}
-
-/* private */
-geom::Geometry*
-CascadedPolygonUnion::extractByEnvelope(geom::Envelope const& env,
-                                        geom::Geometry* geom, std::vector<geom::Geometry*>& disjointGeoms)
-{
-    std::vector<geom::Geometry*> intersectingGeoms;
-    extractByEnvelope(env, geom, intersectingGeoms, disjointGeoms);
-
-    return geomFactory->buildGeometry(intersectingGeoms);
-}
 
 geom::Geometry*
 CascadedPolygonUnion::unionActual(geom::Geometry* g0, geom::Geometry* g1)
 {
-    return restrictToPolygons(std::unique_ptr<geom::Geometry>(g0->Union(g1))).release();
+    OverlapUnion unionOp(g0, g1);
+    geom::Geometry* justPolys = restrictToPolygons(
+        std::unique_ptr<geom::Geometry>(unionOp.doUnion())
+        ).release();
+    return justPolys;
 }
 
 std::unique_ptr<geom::Geometry>
@@ -412,10 +269,7 @@ CascadedPolygonUnion::restrictToPolygons(std::unique_ptr<geom::Geometry> g)
     for(Polygon::ConstVect::size_type i = 0; i < n; ++i) {
         (*newpolys)[i] = polygons[i]->clone().release();
     }
-    return unique_ptr<Geometry>(
-               g->getFactory()->createMultiPolygon(newpolys)
-           );
-
+    return unique_ptr<Geometry>(g->getFactory()->createMultiPolygon(newpolys));
 }
 
 } // namespace geos.operation.union
diff --git a/src/operation/union/CascadedUnion.cpp b/src/operation/union/CascadedUnion.cpp
index 8d7a96f..5cae112 100644
--- a/src/operation/union/CascadedUnion.cpp
+++ b/src/operation/union/CascadedUnion.cpp
@@ -168,7 +168,7 @@ geom::Geometry*
 CascadedUnion::unionUsingEnvelopeIntersection(geom::Geometry* g0,
         geom::Geometry* g1, geom::Envelope const& common)
 {
-    std::vector<geom::Geometry*> disjointPolys;
+    std::vector<const geom::Geometry*> disjointPolys;
 
     std::unique_ptr<geom::Geometry> g0Int(extractByEnvelope(common, g0, disjointPolys));
     std::unique_ptr<geom::Geometry> g1Int(extractByEnvelope(common, g1, disjointPolys));
@@ -181,12 +181,12 @@ CascadedUnion::unionUsingEnvelopeIntersection(geom::Geometry* g0,
 
 geom::Geometry*
 CascadedUnion::extractByEnvelope(geom::Envelope const& env,
-                                 geom::Geometry* geom, std::vector<geom::Geometry*>& disjointGeoms)
+                                 geom::Geometry* geom, std::vector<const geom::Geometry*>& disjointGeoms)
 {
-    std::vector<geom::Geometry*> intersectingGeoms;
+    std::vector<const geom::Geometry*> intersectingGeoms;
 
     for(std::size_t i = 0; i < geom->getNumGeometries(); i++) {
-        geom::Geometry* elem = const_cast<geom::Geometry*>(geom->getGeometryN(i));
+        const geom::Geometry* elem = geom->getGeometryN(i);
         if(elem->getEnvelopeInternal()->intersects(env)) {
             intersectingGeoms.push_back(elem);
         }
diff --git a/src/operation/union/Makefile.am b/src/operation/union/Makefile.am
index 0a35e03..76b2caa 100644
--- a/src/operation/union/Makefile.am
+++ b/src/operation/union/Makefile.am
@@ -10,6 +10,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/include
 libopunion_la_SOURCES = \
     CascadedPolygonUnion.cpp \
     CascadedUnion.cpp \
+    OverlapUnion.cpp \
     CoverageUnion.cpp \
     PointGeometryUnion.cpp \
     UnaryUnionOp.cpp
diff --git a/src/operation/union/OverlapUnion.cpp b/src/operation/union/OverlapUnion.cpp
new file mode 100644
index 0000000..405407f
--- /dev/null
+++ b/src/operation/union/OverlapUnion.cpp
@@ -0,0 +1,267 @@
+/**********************************************************************
+ *
+ * GEOS - Geometry Engine Open Source
+ * http://geos.osgeo.org
+ *
+ * Copyright (C) 2019 Paul Ramsey <pramsey at cleverelephant.ca>
+ *
+ * This is free software; you can redistribute and/or modify it under
+ * the terms of the GNU Lesser General Public Licence as published
+ * by the Free Software Foundation.
+ * See the COPYING file for more information.
+ *
+ **********************************************************************/
+
+#include <geos/operation/union/OverlapUnion.h>
+
+#include <geos/geom/Coordinate.h>
+#include <geos/geom/CoordinateSequence.h>
+#include <geos/geom/CoordinateSequenceFilter.h>
+#include <geos/geom/Envelope.h>
+#include <geos/geom/GeometryFactory.h>
+#include <geos/geom/LineSegment.h>
+#include <geos/geom/util/GeometryCombiner.h>
+#include <geos/util/TopologyException.h>
+
+namespace geos {
+namespace operation {
+namespace geounion {
+
+// https://github.com/locationtech/jts/blob/master/modules/core/src/main/java/org/locationtech/jts/operation/union/OverlapUnion.java
+
+using namespace geom;
+using namespace geom::util;
+
+/* public */
+std::unique_ptr<Geometry>
+OverlapUnion::doUnion()
+{
+    Envelope overlapEnv = overlapEnvelope(g0, g1);
+    /**
+     * If no overlap, can just combine the geometries
+     */
+    if (overlapEnv.isNull()) {
+        // Geometry* g0Copy = g0->clone().get();
+        // Geometry* g1Copy = g1->clone().get();
+        return GeometryCombiner::combine(g0, g1);
+    }
+
+    std::vector<std::unique_ptr<Geometry>> disjointPolys;
+
+    std::unique_ptr<Geometry> g0Overlap = extractByEnvelope(overlapEnv, g0, disjointPolys);
+    std::unique_ptr<Geometry> g1Overlap = extractByEnvelope(overlapEnv, g1, disjointPolys);
+
+    // std::out << "# geoms in common: " << intersectingPolys.size() << std::endl;
+    std::unique_ptr<Geometry> theUnion(unionFull(g0Overlap.get(), g1Overlap.get()));
+    isUnionSafe = isBorderSegmentsSame(theUnion.get(), overlapEnv);
+    if (!isUnionSafe) {
+        // overlap union changed border segments... need to do full union
+        // std::out <<  "OverlapUnion: Falling back to full union" << std::endl;
+        return unionFull(g0, g1);
+    }
+    else {
+        // std::out << "OverlapUnion: fast path" << std::endl;
+        return combine(theUnion, disjointPolys);
+    }
+}
+
+/* private */
+Envelope
+OverlapUnion::overlapEnvelope(const Geometry* geom0, const Geometry* geom1)
+{
+    const Envelope* g0Env = geom0->getEnvelopeInternal();
+    const Envelope* g1Env = geom1->getEnvelopeInternal();
+    Envelope overlapEnv;
+    g0Env->intersection(*g1Env, overlapEnv);
+    return overlapEnv;
+}
+
+/* private */
+std::unique_ptr<Geometry>
+OverlapUnion::combine(std::unique_ptr<Geometry>& unionGeom, std::vector<std::unique_ptr<Geometry>>& disjointPolys)
+{
+    if (disjointPolys.size() <= 0)
+        return std::move(unionGeom);
+
+    disjointPolys.push_back(std::move(unionGeom));
+    return GeometryCombiner::combine(disjointPolys);
+}
+
+/* private */
+std::unique_ptr<Geometry>
+OverlapUnion::extractByEnvelope(const Envelope& env, const Geometry* geom, std::vector<std::unique_ptr<Geometry>>& disjointGeoms)
+{
+    std::vector<const Geometry*> intersectingGeoms;
+    for (std::size_t i = 0; i < geom->getNumGeometries(); i++) {
+        const Geometry* elem = geom->getGeometryN(i);
+        if (elem->getEnvelopeInternal()->intersects(env)) {
+            intersectingGeoms.push_back(elem);
+        }
+        else {
+            disjointGeoms.push_back(elem->clone());
+        }
+    }
+    std::unique_ptr<Geometry> intersectingGeom(geomFactory->buildGeometry(intersectingGeoms));
+    return std::move(intersectingGeom);
+}
+
+/* private */
+std::unique_ptr<Geometry>
+OverlapUnion::unionFull(const Geometry* geom0, const Geometry* geom1)
+{
+    try {
+        return geom0->Union(geom1);
+    }
+    catch (geos::util::TopologyException ex) {
+        /**
+         * If the overlay union fails,
+         * try a buffer union, which often succeeds
+         */
+        return unionBuffer(geom0, geom1);
+    }
+}
+
+/* private */
+std::unique_ptr<Geometry>
+OverlapUnion::unionBuffer(const Geometry* geom0, const Geometry* geom1)
+{
+    std::unique_ptr<Geometry> copy0 = geom0->clone();
+    std::unique_ptr<Geometry> copy1 = geom1->clone();
+    std::vector<std::unique_ptr<Geometry>> geoms;
+    geoms.push_back(std::move(copy0));
+    geoms.push_back(std::move(copy1));
+    const GeometryFactory* factory = copy0->getFactory();
+    std::unique_ptr<GeometryCollection> gColl(factory->createGeometryCollection(std::move(geoms)));
+    return gColl->buffer(0.0);
+}
+
+/* private */
+bool
+OverlapUnion::isBorderSegmentsSame(const Geometry* result, const Envelope& env)
+{
+    std::vector<LineSegment*> segsBefore = extractBorderSegments(g0, g1, env);
+    std::vector<LineSegment*> segsAfter;
+    extractBorderSegments(result, env, segsAfter);
+    //std::cout << ("# seg before: " << segsBefore.size() << " - # seg after: " << segsAfter.size() << std::endl;
+    bool eq = isEqual(segsBefore, segsAfter);
+
+    // Clean up temporary segment arrays
+    for (auto seg : segsBefore) delete seg;
+    for (auto seg : segsAfter) delete seg;
+
+    return eq;
+}
+
+static bool lineSegmentPtrCmp(const LineSegment* a, const LineSegment* b)
+{
+    return a->compareTo(*b) < 0;
+}
+
+/* private */
+bool
+OverlapUnion::isEqual(std::vector<LineSegment*>& segs0, std::vector<LineSegment*>& segs1)
+{
+    if (segs0.size() != segs1.size())
+        return false;
+
+    std::sort(segs0.begin(), segs0.end(), lineSegmentPtrCmp);
+    std::sort(segs1.begin(), segs1.end(), lineSegmentPtrCmp);
+
+    size_t sz = segs0.size();
+    for (std::size_t i = 0; i < sz; i++) {
+        if (segs0[i]->p0.x != segs1[i]->p0.x ||
+            segs0[i]->p0.y != segs1[i]->p0.y ||
+            segs0[i]->p1.x != segs1[i]->p1.x ||
+            segs0[i]->p1.y != segs1[i]->p1.y)
+        {
+            return false;
+        }
+    }
+
+    return true;
+}
+
+/* private */
+std::vector<LineSegment*>
+OverlapUnion::extractBorderSegments(const Geometry* geom0, const Geometry* geom1, const Envelope& env)
+{
+    std::vector<LineSegment*> segs;
+    extractBorderSegments(geom0, env, segs);
+    if (geom1 != nullptr)
+        extractBorderSegments(geom1, env, segs);
+    return segs;
+}
+
+/* static */
+static bool
+intersects(const Envelope& env, const Coordinate& p0, const Coordinate& p1)
+{
+    return env.intersects(p0) || env.intersects(p1);
+}
+
+/* static */
+static bool
+containsProperly(const Envelope& env, const Coordinate& p)
+{
+    if (env.isNull()) return false;
+    return p.x > env.getMinX() &&
+           p.x < env.getMaxX() &&
+           p.y > env.getMinY() &&
+           p.y < env.getMaxY();
+}
+
+/* static */
+static bool
+containsProperly(const Envelope& env, const Coordinate& p0, const Coordinate& p1)
+{
+    return containsProperly(env, p0) && containsProperly(env, p1);
+}
+
+/* privatef */
+void
+OverlapUnion::extractBorderSegments(const Geometry* geom, const Envelope& penv, std::vector<LineSegment*>& psegs)
+{
+    class BorderSegmentFilter : public CoordinateSequenceFilter {
+
+    private:
+        std::vector<LineSegment*>* segs;
+        const Envelope env;
+
+    public:
+
+        BorderSegmentFilter(const Envelope& penv, std::vector<LineSegment*>* psegs)
+            : env(penv),
+              segs(psegs) {};
+
+        bool
+        isDone() const override { return false; }
+
+        bool
+        isGeometryChanged() const override  { return false; }
+
+        void
+        filter_ro(const CoordinateSequence& seq, std::size_t i) override
+        {
+            if (i <= 0) return;
+
+            // extract LineSegment
+            const Coordinate& p0 = seq.getAt(i-1);
+            const Coordinate& p1 = seq.getAt(i  );
+            bool isBorder = intersects(env, p0, p1) && ! containsProperly(env, p0, p1);
+            if (isBorder) {
+                segs->push_back(new LineSegment(p0, p1));
+            }
+        };
+
+    };
+
+    BorderSegmentFilter bsf(penv, &psegs);
+    geom->apply_ro(bsf);
+
+}
+
+
+
+}
+}
+}
diff --git a/src/triangulate/quadedge/QuadEdgeSubdivision.cpp b/src/triangulate/quadedge/QuadEdgeSubdivision.cpp
index f2dedb9..b5bdd55 100644
--- a/src/triangulate/quadedge/QuadEdgeSubdivision.cpp
+++ b/src/triangulate/quadedge/QuadEdgeSubdivision.cpp
@@ -478,26 +478,20 @@ std::unique_ptr<geom::MultiLineString>
 QuadEdgeSubdivision::getEdges(const geom::GeometryFactory& geomFact)
 {
     std::unique_ptr<QuadEdgeList> p_quadEdges(getPrimaryEdges(false));
-    std::vector<Geometry*> edges(p_quadEdges->size());
+    std::vector<std::unique_ptr<Geometry>> edges;
     const CoordinateSequenceFactory* coordSeqFact = geomFact.getCoordinateSequenceFactory();
-    int i = 0;
-    for(QuadEdgeSubdivision::QuadEdgeList::iterator it = p_quadEdges->begin(); it != p_quadEdges->end(); ++it) {
-        QuadEdge* qe = *it;
+
+    edges.reserve(p_quadEdges->size());
+    for(const QuadEdge* qe : *p_quadEdges) {
         auto coordSeq = coordSeqFact->create(2);
 
         coordSeq->setAt(qe->orig().getCoordinate(), 0);
         coordSeq->setAt(qe->dest().getCoordinate(), 1);
 
-        edges[i++] = static_cast<Geometry*>(geomFact.createLineString(coordSeq.release()));
-    }
-
-    geom::MultiLineString* result = geomFact.createMultiLineString(edges);
-
-    for(std::vector<Geometry*>::iterator it = edges.begin(); it != edges.end(); ++it) {
-        delete *it;
+        edges.emplace_back(geomFact.createLineString(coordSeq.release()));
     }
 
-    return std::unique_ptr<MultiLineString>(result);
+    return geomFact.createMultiLineString(std::move(edges));
 }
 
 std::unique_ptr<GeometryCollection>
diff --git a/tests/unit/geom/GeometryCollectionTest.cpp b/tests/unit/geom/GeometryCollectionTest.cpp
index 8030587..5b25370 100644
--- a/tests/unit/geom/GeometryCollectionTest.cpp
+++ b/tests/unit/geom/GeometryCollectionTest.cpp
@@ -56,7 +56,7 @@ void object::test<1>
     std::unique_ptr<Geometry> point(factory_->createPoint(coord));
     ensure(point != nullptr);
 
-    std::vector<Geometry*> geoms{empty_point.get(), point.get()};
+    std::vector<const Geometry*> geoms{empty_point.get(), point.get()};
     std::unique_ptr<Geometry> col(factory_->createGeometryCollection(geoms));
     ensure(col != nullptr);
 
@@ -78,7 +78,7 @@ void object::test<2>
     std::unique_ptr<Geometry> g(gf->createEmptyGeometry());
 
     g->setSRID(0);
-    std::vector<Geometry*> v = {g.get()};
+    std::vector<const Geometry*> v = {g.get()};
     std::unique_ptr<Geometry> geom_col(gf->createGeometryCollection(v));
     ensure_equals(geom_col->getGeometryN(0)->getSRID(), 1);
 
diff --git a/tests/unit/geom/GeometryFactoryTest.cpp b/tests/unit/geom/GeometryFactoryTest.cpp
index 8bf5085..2ad4e51 100644
--- a/tests/unit/geom/GeometryFactoryTest.cpp
+++ b/tests/unit/geom/GeometryFactoryTest.cpp
@@ -866,7 +866,7 @@ void object::test<23>
     const std::size_t size = 3;
     geos::geom::Coordinate coord(x_, y_, z_);
 
-    std::vector<GeometryPtr> vec;
+    std::vector<const geos::geom::Geometry*> vec;
 
     GeometryPtr geo = nullptr;
     geo = factory_->createPoint(coord);
@@ -892,9 +892,8 @@ void object::test<23>
 
     // FREE MEMORY
     factory_->destroyGeometry(col);
-    std::vector<GeometryPtr>::const_iterator it;
-    for(it = vec.begin(); it != vec.end(); ++it) {
-        delete(*it);
+    for(auto& g : vec) {
+        delete g;
     }
 }
 
@@ -991,7 +990,7 @@ void object::test<26>
     const std::size_t size = 3;
     geos::geom::Coordinate coord(x_, y_, z_);
 
-    std::vector<GeometryPtr> vec;
+    std::vector<const geos::geom::Geometry*> vec;
 
     GeometryPtr geo = nullptr;
     geo = factory_->createPoint(coord);
@@ -1019,9 +1018,8 @@ void object::test<26>
 
     // FREE MEMORY
     factory_->destroyGeometry(mp);
-    std::vector<GeometryPtr>::const_iterator it;
-    for(it = vec.begin(); it != vec.end(); ++it) {
-        delete(*it);
+    for(auto& g : vec) {
+        delete g;
     }
 }
 
@@ -1147,7 +1145,7 @@ void object::test<30>
     const std::size_t size = 5;
     const std::size_t lineSize = 2;
 
-    std::vector<GeometryPtr> lines;
+    std::vector<const geos::geom::Geometry*> lines;
 
     for(std::size_t i = 0; i < size; ++i) {
         const double factor = static_cast<double>(i * i);
@@ -1176,9 +1174,8 @@ void object::test<30>
 
     // FREE MEMORY
     factory_->destroyGeometry(mls);
-    std::vector<GeometryPtr>::const_iterator it;
-    for(it = lines.begin(); it != lines.end(); ++it) {
-        delete(*it);
+    for(auto& g : lines) {
+        delete g;
     }
 }
 
diff --git a/tests/unit/operation/linemerge/LineMergerTest.cpp b/tests/unit/operation/linemerge/LineMergerTest.cpp
index 2f71388..6ede138 100644
--- a/tests/unit/operation/linemerge/LineMergerTest.cpp
+++ b/tests/unit/operation/linemerge/LineMergerTest.cpp
@@ -34,8 +34,8 @@ struct test_linemerger_data {
     typedef geos::geom::Geometry Geom;
     typedef geos::geom::Geometry::Ptr GeomPtr;
 
-    GeomVect inpGeoms;
-    GeomVect expGeoms;
+    std::vector<const geos::geom::Geometry*> inpGeoms;
+    std::vector<const geos::geom::Geometry*> expGeoms;
     LineVect* mrgGeoms;
 
     test_linemerger_data()
@@ -61,7 +61,7 @@ struct test_linemerger_data {
     }
 
     void
-    readWKT(const char* const* inputWKT, std::vector<Geom*>& geoms)
+    readWKT(const char* const* inputWKT, std::vector<const Geom*>& geoms)
     {
         for(const char* const* ptr = inputWKT; *ptr; ++ptr) {
             geoms.push_back(readWKT(*ptr).release());
@@ -88,9 +88,7 @@ struct test_linemerger_data {
     void
     delAll(TargetContainer& geoms)
     {
-        for(typename TargetContainer::const_iterator i = geoms.begin(),
-                e = geoms.end(); i != e; ++i) {
-            Geom* g = dynamic_cast<Geom*>(*i);
+        for(auto& g : geoms) {
             delete g;
         }
     }
@@ -102,10 +100,7 @@ struct test_linemerger_data {
             bool compareDirections)
     {
         ensure_equals(actualGeometries.size(), expectedGeometries.size());
-        for(typename TargetContainer1::const_iterator
-                i = expectedGeometries.begin(),
-                e = expectedGeometries.end(); i != e; ++i) {
-            Geom* g = dynamic_cast<Geom*>(*i);
+        for(auto & g : expectedGeometries) {
             ensure(contains(actualGeometries, g, compareDirections));
         }
     }
diff --git a/tests/unit/operation/union/CoverageUnionTest.cpp b/tests/unit/operation/union/CoverageUnionTest.cpp
index 2bf2513..2fed702 100644
--- a/tests/unit/operation/union/CoverageUnionTest.cpp
+++ b/tests/unit/operation/union/CoverageUnionTest.cpp
@@ -44,16 +44,13 @@ namespace tut {
 
         WKTReader reader(gfact.get());
 
-        std::vector<Geometry*> geoms;
+        std::vector<std::unique_ptr<Geometry>> geoms;
 
         for (const auto& wkt : wkt_geoms) {
-            geoms.push_back(reader.read(wkt).release());
+            geoms.push_back(reader.read(wkt));
         }
 
-        std::unique_ptr<Geometry> coll(gfact->createGeometryCollection(geoms));
-        for (auto& g : geoms) {
-            delete g;
-        }
+        std::unique_ptr<Geometry> coll(gfact->createGeometryCollection(std::move(geoms)));
 
         auto u1 = UnaryUnionOp::Union(*coll);
         auto u2 = CoverageUnion::Union(coll.get());
@@ -70,16 +67,13 @@ namespace tut {
 
         WKTReader reader(gfact.get());
 
-        std::vector<Geometry*> geoms;
+        std::vector<std::unique_ptr<Geometry>> geoms;
 
         for (const auto& wkt : wkt_geoms) {
-            geoms.push_back(reader.read(wkt).release());
+            geoms.push_back(reader.read(wkt));
         }
 
-        std::unique_ptr<Geometry> coll(gfact->createGeometryCollection(geoms));
-        for (auto& g : geoms) {
-            delete g;
-        }
+        std::unique_ptr<Geometry> coll(gfact->createGeometryCollection(std::move(geoms)));
 
         try {
             auto u1 = CoverageUnion::Union(coll.get());
diff --git a/tests/xmltester/tests/issue/issue-geos-837.xml b/tests/xmltester/tests/issue/issue-geos-837.xml
index e5923aa..624b7a7 100644
--- a/tests/xmltester/tests/issue/issue-geos-837.xml
+++ b/tests/xmltester/tests/issue/issue-geos-837.xml
@@ -8,8 +8,8 @@
   </a>
 <test>
   <op name="union" arg1="A">
-MULTIPOLYGON (((844640.8000000000465661 1822971.8000000000465661, 844639.9000000000232831 1823072.0000000000000000, 844539.8000000000465661 1823071.1000000000931323, 844539.0000000000000000 1823171.1999999999534339, 844639.0999999999767169 1823172.1000000000931323, 844638.2000000000698492 1823272.1999999999534339, 844738.3000000000465661 1823273.0000000000000000, 844838.4000000000232831 1823273.9000000001396984, 844839.3000000000465661 1823173.8000000000465661, 844841.0000000000000000 1822973.6000000000931323, 844740.9000000000232831 1822972.6999999999534339, 844640.8000000000465661 1822971.8000000000465661), (844740.9000000000232831 1822972.6999999999534339, 844739.2000000000698492 1823172.9000000001396984, 844740.0000000000000000 1823072.8000000000465661, 844740.9000000000232831 1822972.6999999999534339)), ((852149.7000000000698492 1822936.1000000000931323, 852148.8000000000465661 1823036.1999999999534339, 852048.7000000000698492 1823035.4000000001396984, 851948.5999999999767169 1
 823034.5000000000000000, 851947.7000000000698492 1823134.6000000000931323, 851847.5999999999767169 1823133.6999999999534339, 851848.5000000000000000 1823033.6000000000931323, 851748.4000000000232831 1823032.8000000000465661, 851747.5000000000000000 1823132.9000000001396984, 851647.4000000000232831 1823132.0000000000000000, 851645.7000000000698492 1823332.1999999999534339, 851644.8000000000465661 1823432.4000000001396984, 851644.0000000000000000 1823532.5000000000000000, 851744.0999999999767169 1823533.3000000000465661, 851742.4000000000232831 1823733.5000000000000000, 851942.5999999999767169 1823735.1999999999534339, 852142.8000000000465661 1823737.0000000000000000, 852242.9000000000232831 1823737.8000000000465661, 852242.0000000000000000 1823837.9000000001396984, 852342.0999999999767169 1823838.8000000000465661, 852343.0000000000000000 1823738.6999999999534339, 852343.9000000000232831 1823638.6000000000931323, 852243.8000000000465661 1823637.6999999999534339, 852244.599999999976716
 9 1823537.6000000000931323, 852344.7000000000698492 1823538.5000000000000000, 852345.5999999999767169 1823438.4000000001396984, 852346.4000000000232831 1823338.3000000000465661, 852446.5000000000000000 1823339.1000000000931323, 852447.4000000000232831 1823239.0000000000000000, 852347.3000000000465661 1823238.1000000000931323, 852348.2000000000698492 1823138.0000000000000000, 852448.3000000000465661 1823138.9000000001396984, 852449.0999999999767169 1823038.8000000000465661, 852349.0000000000000000 1823037.9000000001396984, 852349.9000000000232831 1822937.8000000000465661, 852249.8000000000465661 1822937.0000000000000000, 852149.7000000000698492 1822936.1000000000931323), (851747.5000000000000000 1823132.9000000001396984, 851746.7000000000698492 1823233.0000000000000000, 851745.8000000000465661 1823333.1000000000931323, 851747.5000000000000000 1823132.9000000001396984), (851844.2000000000698492 1823534.1999999999534339, 851845.0000000000000000 1823434.1000000000931323, 851845.90000000
 00232831 1823334.0000000000000000, 851844.2000000000698492 1823534.1999999999534339), (851944.3000000009778887 1823534.9999998814892024, 851944.3000000000465661 1823535.0000000000000000, 851944.2999999989988282 1823535.0000001164153218, 851944.3000000009778887 1823534.9999998814892024), (852045.3000000000465661 1823435.8000000000465661, 852145.4000000000232831 1823436.6000000000931323, 852245.5000000000000000 1823437.5000000000000000, 852045.3000000000465661 1823435.8000000000465661), (852246.3000000000465661 1823337.4000000001396984, 852248.0000000000000000 1823137.1999999999534339, 852247.2000000000698492 1823237.3000000000465661, 852246.3000000000465661 1823337.4000000001396984), (851943.4499961829278618 1823635.1004495162051171, 852043.5000000000000000 1823636.0000000000000000, 852143.5999999999767169 1823636.9000000001396984, 851943.4499961829278618 1823635.1004495162051171)), ((843138.3000000000465661 1823059.1000000000931323, 843139.2000000000698492 1822959.0000000000000000, 
 842939.0000000000000000 1822957.3000000000465661, 842738.7000000000698492 1822955.5000000000000000, 842737.8495794840855524 1823055.6995466686785221, 842637.8000000000465661 1823054.8000000000465661, 842537.7000000000698492 1823053.9000000001396984, 842437.5999999999767169 1823053.1000000000931323, 842329.6540499393595383 1823052.1657141472678632, 842379.2800000000279397 1823107.6000000000931323, 842436.4454971232917160 1823181.5063755111768842, 842452.5600000000558794 1823202.3400000000838190, 842472.4599999999627471 1823216.5200000000186265, 842472.1419695207150653 1823253.5901554452721030, 842471.7299999999813735 1823301.6100000001024455, 842485.1900000000605360 1823366.8000000000465661, 842509.9599999999627471 1823397.0500000000465661, 842558.7000000000698492 1823433.5100000000093132, 842678.2800000000279397 1823498.6100000001024455, 842697.1900000000605360 1823511.7800000000279397, 842714.1700000000419095 1823516.9299999999348074, 842747.2600000000093132 1823511.209999999962747
 1, 842881.0400000000372529 1823438.2700000000186265, 842931.3599999999860302 1823407.6699999999254942, 842972.6400000000139698 1823497.1200000001117587, 842995.7199999999720603 1823490.3100000000558794, 843046.9899999999906868 1823465.7199999999720603, 843133.3900000000139698 1823431.4199999999254942, 843135.0583509306889027 1823434.9636139289941639, 843158.9500000000698492 1823485.7099999999627471, 843179.6800000000512227 1823520.9199999999254942, 843195.3900000000139698 1823557.1000000000931323, 843197.7027817158959806 1823560.1727522832807153, 843233.7201772944536060 1823608.0253160321153700, 843253.7900000000372529 1823634.6899999999441206, 843290.0382458720123395 1823661.0534525145776570, 843344.3300000000745058 1823700.5400000000372529, 843432.4742545809131116 1823777.2083722923416644, 843434.3000000000465661 1823562.1999999999534339, 843534.5000000000000000 1823563.0000000000000000, 843535.3000000000465661 1823462.9000000001396984, 843536.2000000000698492 1823362.800000000046
 5661, 843436.0999999999767169 1823362.0000000000000000, 843336.0000000000000000 1823361.1000000000931323, 843335.0999999999767169 1823461.1999999999534339, 843334.2000000000698492 1823561.3000000000465661, 843234.0999999999767169 1823560.5000000000000000, 843235.8000000000465661 1823360.3000000000465661, 843237.5999999999767169 1823160.0000000000000000, 843137.5000000000000000 1823159.1999999999534339, 843138.3000000000465661 1823059.1000000000931323), (843137.5000000000000000 1823159.1999999999534339, 843135.7000000000698492 1823359.4000000001396984, 843136.5999999999767169 1823259.3000000000465661, 843137.5000000000000000 1823159.1999999999534339), (842787.0500000007450581 1823156.2000000001862645, 842837.0999999999767169 1823156.6000000000931323, 842937.2000000000698492 1823157.5000000000000000, 842787.0500000007450581 1823156.2000000001862645), (842635.2000000000698492 1823355.1000000000931323, 842835.4000000000232831 1823356.8000000000465661, 842735.3000000000465661 1823356.000
 0000000000000, 842635.2000000000698492 1823355.1000000000931323)), ((848944.5000000000000000 1823108.9000000001396984, 848942.8000000000465661 1823309.1000000000931323, 848941.0999999999767169 1823509.3000000000465661, 848940.2000000000698492 1823609.4000000001396984, 848939.4000000000232831 1823709.5000000000000000, 849039.5000000000000000 1823710.4000000001396984, 848839.3000000000465661 1823708.6000000000931323, 848739.2000000000698492 1823707.8000000000465661, 848438.8000000000465661 1823705.1999999999534339, 848439.7000000000698492 1823605.1000000000931323, 848339.5999999999767169 1823604.1999999999534339, 848239.5000000000000000 1823603.4000000001396984, 848238.6004495160887018 1823703.4500038172118366, 848138.5000000000000000 1823702.6000000000931323, 848038.4000000000232831 1823701.8000000000465661, 848037.5000000000000000 1823801.9000000001396984, 848137.6500033895717934 1823802.6996008253190666, 848136.8000000000465661 1823902.8000000000465661, 848236.9000000000232831 1823
 903.6999999999534339, 848237.8000000000465661 1823803.6000000000931323, 848437.9998201937414706 1823805.3199984552338719, 848437.0999999999767169 1823905.4000000001396984, 848537.2000000000698492 1823906.3000000000465661, 848637.3000000000465661 1823907.1000000000931323, 848638.1996403874363750 1823807.0399969106074423, 848738.3000000000465661 1823807.9000000001396984, 848737.4000000000232831 1823908.0000000000000000, 848736.8307372784474865 1823979.2289980300702155, 848757.1700000000419095 1823987.2099999999627471, 848796.1300000000046566 1823997.5500000000465661, 848798.2457518703304231 1824008.6234654255677015, 848936.8000000000465661 1824009.8000000000465661, 849036.9000000000232831 1824010.6999999999534339, 849036.0000000000000000 1824110.8000000000465661, 849136.0999999999767169 1824111.6000000000931323, 849135.3000000000465661 1824211.6999999999534339, 849227.4070192123763263 1824212.5281350379809737, 849235.4582774870796129 1824206.1182483835145831, 849236.3000000000465661 1
 824112.5000000000000000, 849237.0999999999767169 1824012.4000000001396984, 849337.2000000000698492 1824013.1999999999534339, 849338.0999999999767169 1823913.1000000000931323, 849338.9000000000232831 1823813.0000000000000000, 849238.8000000000465661 1823812.1999999999534339, 849239.7000000000698492 1823712.1000000000931323, 849240.5000000000000000 1823612.0000000000000000, 849241.4000000000232831 1823511.9000000001396984, 849242.3000000000465661 1823411.6999999999534339, 849243.0999999999767169 1823311.6000000000931323, 849143.0499966071220115 1823310.8003995732869953, 849143.9000000000232831 1823210.6999999999534339, 849043.8000000000465661 1823209.8000000000465661, 849044.5999999999767169 1823109.6999999999534339, 848944.5000000000000000 1823108.9000000001396984), (849039.5000000000000000 1823710.4000000001396984, 849040.3000000000465661 1823610.1999999999534339, 849140.4000000000232831 1823611.1000000000931323, 849139.5999999999767169 1823711.1999999999534339, 849039.5000000000000
 000 1823710.4000000001396984), (848737.4000000000232831 1823908.0000000000000000, 848837.5000000000000000 1823908.8000000000465661, 848937.5999999999767169 1823909.6999999999534339, 848737.4000000000232831 1823908.0000000000000000), (849137.0000000000000000 1824011.5000000000000000, 849138.7000000000698492 1823811.3000000000465661, 849137.9000000000232831 1823911.4000000001396984, 849137.0000000000000000 1824011.5000000000000000), (848488.0500002900371328 1823805.7500000025611371, 848571.4666664082324132 1823806.4666666644625366, 848538.0999999999767169 1823806.1999999999534339, 848488.0500002900371328 1823805.7500000025611371), (849038.5999999999767169 1823810.5000000000000000, 848938.5000000000000000 1823809.6000000000931323, 848838.4000000000232831 1823808.6999999999534339, 849038.5999999999767169 1823810.5000000000000000)), ((844932.7761059190379456 1823944.7908861120231450, 844927.9000000000232831 1823966.4000000001396984, 844926.1971254986710846 1823975.4433307987637818, 84492
 0.5600000000558794 1824005.3800000001210719, 844914.2800000000279397 1824037.3600000001024455, 844900.1199999999953434 1824053.2600000000093132, 844831.4899999999906868 1824117.7399999999906868, 844831.2088827658444643 1824118.2226566665340215, 844815.2399999999906868 1824145.6400000001303852, 844784.9799999999813735 1824171.4100000001490116, 844763.5500000000465661 1824218.2800000000279397, 844739.1900000000605360 1824257.1100000001024455, 844732.5689081742893904 1824274.1257943792734295, 844729.6396295028971508 1824281.6538584602531046, 844728.9000000000232831 1824374.1999999999534339, 844727.2000000000698492 1824574.4000000001396984, 844729.6370590717997402 1824281.6604643084574491, 844694.1500000000232831 1824372.8600000001024455, 844679.7099999999627471 1824422.7900000000372529, 844669.4100000000325963 1824456.7399999999906868, 844619.9799999999813735 1824499.3700000001117587, 844597.2096419272711501 1824573.2967368511017412, 844596.3000000000465661 1824576.2500000000000000, 84
 4595.9899999999906868 1824612.2900000000372529, 844586.7700000000186265 1824637.2399999999906868, 844566.9099158239550889 1824673.1669223201461136, 844560.3300000000745058 1824685.0700000002980232, 844554.0500000001629815 1824717.0500000000465661, 844557.7900000000372529 1824747.1200000001117587, 844627.4500000000698492 1824796.7700000000186265, 844694.2099999999627471 1824834.3900000001303852, 844724.7609713199781254 1824854.5584635899867862, 844755.6946466653607786 1824874.9795722477138042, 844824.2763564363121986 1824920.2543264275882393, 844824.2983818182256073 1824920.2688666565809399, 844889.3300000000745058 1824963.1999999999534339, 844892.4905942827463150 1824976.3175977508071810, 844901.9000000001396984 1825015.3699999998789281, 844923.5665353111689910 1825015.8703710103873163, 844923.5730725777102634 1825015.8705219828989357, 845040.0300000000279397 1825018.5600000000558794, 845051.8699999999953434 1825039.6799999999348074, 845072.8800000000046566 1825040.8600000001024455,
  845082.2800000000279397 1824995.8900000001303852, 845096.2800000000279397 1824997.0100000000093132, 845101.1099999999860302 1825018.0800000000745058, 845219.2299999999813735 1825020.0900000000838190, 845221.9000000000232831 1825059.1600000001490116, 845224.6310738313477486 1825079.2110685959924012, 845231.3199999999487773 1825128.3200000000651926, 845246.4599999999627471 1825113.4299999999348074, 845279.5800000000745058 1825103.6999999999534339, 845296.5299999999115244 1825112.8600000001024455, 845313.4000000000232831 1825130.0200000000186265, 845376.4200000000419095 1825136.5700000000651926, 845381.2399999999906868 1825274.7700000000186265, 845413.2899999999208376 1825273.0400000000372529, 845573.4099999999161810 1825281.4200000001583248, 845620.9899999999906868 1825336.8900000003632158, 845687.8272242128150538 1825383.5150588175747544, 845721.4000000000232831 1825383.8000000002793968, 845687.8513357406482100 1825383.5318788068834692, 845693.6400000000139698 1825387.57000000006519
 26, 845721.2889667560812086 1825396.1617011527996510, 845766.5299999999115244 1825410.2199999999720603, 845836.8300000000745058 1825384.8000000000465661, 845903.4599999999627471 1825437.4299999999348074, 845949.9200000000419095 1825506.9000000001396984, 845983.5299999999115244 1825556.2500000000000000, 845995.4399999999441206 1825568.3600000001024455, 846045.4799999999813735 1825570.7900000000372529, 846123.5299999999115244 1825575.4699999999720603, 846195.7600000000093132 1825558.0700000000651926, 846215.9699999999720603 1825537.2199999999720603, 846211.1099999999860302 1825519.1500000001396984, 846496.8699999999953434 1825469.5399999998044223, 846518.0300000000279397 1825453.7099999999627471, 846542.3900000000139698 1825414.8700000001117587, 846555.7199999999720603 1825377.9399999999441206, 846608.3399999999674037 1825313.3200000000651926, 846687.2899999999208376 1825212.8799999998882413, 846748.8300000000745058 1825157.3500000000931323, 846777.2199999999720603 1825115.53999999980
 44223, 846813.9500000000698492 1825035.7600000000093132, 846818.2099999999627471 1825005.7700000000186265, 846762.2300000000977889 1824995.2800000000279397, 846725.3199999999487773 1824979.9399999999441206, 846699.4700000000884756 1824958.7000000001862645, 846688.6600000000325963 1824935.5800000000745058, 846692.9703912005061284 1824891.5967367838602513, 846694.1500000000232831 1824879.5600000000558794, 846697.8000000000465661 1824803.5100000000093132, 846698.4490068613085896 1824791.5024640944320709, 846698.4490068611921743 1824791.5024640944320709, 846701.3699999999953434 1824737.4599999999627471, 846728.6324568932177499 1824667.7812779853120446, 846730.0999999999767169 1824491.5000000000000000, 846630.0666614775545895 1824490.6005993541330099, 846630.8153520846972242 1824404.1268342211842537, 846604.2399999999906868 1824388.2299999999813735, 846546.7500000000000000 1824320.6600000001490116, 846531.5441637829644606 1824307.5050767704378814, 846529.0999999999767169 1824589.90000000
 01396984, 846529.9000000000232831 1824489.8000000000465661, 846530.8000000000465661 1824389.6000000000931323, 846531.5381628699833527 1824307.4998852408025414, 846526.8800000000046566 1824303.4699999999720603, 846531.6099206856451929 1824299.5188215249218047, 846531.7000000000698492 1824289.5000000000000000, 846531.6133103400934488 1824299.5159899489954114, 846543.4766106829047203 1824289.6058836125303060, 846567.2099999999627471 1824269.7800000000279397, 846612.4100000000325963 1824252.1500000001396984, 846632.2175146056106314 1824238.1584849809296429, 846669.8300000000745058 1824211.5900000000838190, 846684.0108215067302808 1824190.7108756965026259, 846698.2199999999720603 1824169.7900000000372529, 846732.9552037363173440 1824162.7156733260490000, 846778.4500000000698492 1824153.4499999999534339, 846832.7800000000279397 1824122.8800000001210719, 846832.7405478489818051 1824091.8918528039939702, 846832.7405478490982205 1824091.8918528039939702, 846832.6500000000232831 1824020.77000
 00000186265, 846834.8013788460521027 1823962.1964441391173750, 846835.2600000000093132 1823949.7099999999627471, 846834.9184087043395266 1823948.4144572964869440, 846826.5300000000279397 1823916.6000000000931323, 846808.8978883343515918 1823891.4617192756850272, 846808.8978883342351764 1823891.4617192756850272, 846738.2708267109701410 1823790.7680000271648169, 846636.0000000000000000 1823789.9000000001396984, 846736.2000000000698492 1823790.6999999999534339, 846736.2227924335747957 1823787.8480967523064464, 846722.6800000000512227 1823768.5400000000372529, 846720.9799999999813735 1823732.4799999999813735, 846698.7676939633674920 1823690.2944471046794206, 846678.6199999999953434 1823652.0300000000279397, 846652.7099999999627471 1823637.7900000000372529, 846637.3552883139345795 1823639.1112343843560666, 846557.5300000000279397 1823645.9799999999813735, 846453.8000000000465661 1823601.0400000000372529, 846465.8800000000046566 1823593.1400000001303852, 846492.3375450056046247 1823588.41
 49966377299279, 846492.3375450057210401 1823588.4149966377299279, 846530.0500000000465661 1823581.6799999999348074, 846537.7877689857268706 1823577.8179056709632277, 846538.5000000000000000 1823488.6999999999534339, 846539.4000000000232831 1823388.6000000000931323, 846439.3000000000465661 1823387.6999999999534339, 846440.0999999999767169 1823287.6000000000931323, 846441.0000000000000000 1823187.5000000000000000, 846340.9000000000232831 1823186.6000000000931323, 846340.0000000000000000 1823286.8000000000465661, 846342.5999999999767169 1822986.4000000001396984, 846242.5000000000000000 1822985.6000000000931323, 846239.9000000000232831 1823285.9000000001396984, 846139.8000000000465661 1823285.0000000000000000, 846138.9000000000232831 1823385.1000000000931323, 846239.0999959603650495 1823386.0004492898005992, 846237.3000000000465661 1823586.1999999999534339, 846337.4000000000232831 1823587.1000000000931323, 846336.5999999999767169 1823687.1999999999534339, 846436.7000000000698492 1823688
 .0000000000000000, 846435.8000000000465661 1823788.1000000000931323, 846535.9000000000232831 1823789.0000000000000000, 846535.0999999999767169 1823889.1000000000931323, 846534.2000000000698492 1823989.1999999999534339, 846334.0000000000000000 1823987.5000000000000000, 846233.9000000000232831 1823986.6000000000931323, 846232.2000000000698492 1824186.9000000001396984, 846332.2666689730249345 1824187.6997336181811988, 846331.4000000000232831 1824287.8000000000465661, 846231.3000000000465661 1824287.0000000000000000, 846230.5000000000000000 1824387.1000000000931323, 846228.8000000000465661 1824587.3000000000465661, 846128.5999999999767169 1824586.4000000001396984, 846129.5000000000000000 1824486.3000000000465661, 846130.4000000000232831 1824386.1999999999534339, 846030.3000000000465661 1824385.4000000001396984, 845930.2000000000698492 1824384.5000000000000000, 845929.3000000000465661 1824484.6000000000931323, 845829.2000000000698492 1824483.6999999999534339, 845830.9000000000232831 1824
 283.5000000000000000, 845831.8000000000465661 1824183.4000000001396984, 845731.7000000000698492 1824182.6000000000931323, 845730.8000000000465661 1824282.6999999999534339, 845729.9000000000232831 1824382.8000000000465661, 845629.8000000000465661 1824381.9000000001396984, 845630.7000000000698492 1824281.8000000000465661, 845530.5999999999767169 1824281.0000000000000000, 845531.4000000000232831 1824180.8000000000465661, 845431.3000000000465661 1824180.0000000000000000, 845432.2000000000698492 1824079.9000000001396984, 845332.0999999999767169 1824079.0000000000000000, 845232.0000000000000000 1824078.1999999999534339, 845233.7000000000698492 1823878.0000000000000000, 845133.5999999999767169 1823877.1000000000931323, 845134.4000000000232831 1823777.0000000000000000, 845137.0000000000000000 1823476.6999999999534339, 844836.7002122720004991 1823474.0750018553808331, 844838.4000000000232831 1823273.9000000001396984, 844638.2000000000698492 1823272.1999999999534339, 844637.3000000000465661 1
 823372.3000000000465661, 844639.0999999999767169 1823172.1000000000931323, 844438.8000000000465661 1823170.3000000000465661, 844438.0000000000000000 1823270.4000000001396984, 844437.0999999999767169 1823370.6000000000931323, 844436.3005327637074515 1823470.6333379461430013, 844236.0999999999767169 1823468.9000000001396984, 844233.5000000000000000 1823769.3000000000465661, 844234.3000000000465661 1823669.1999999999534339, 844134.2000000000698492 1823668.3000000000465661, 844135.0999999999767169 1823568.1999999999534339, 844135.9000000000232831 1823468.1000000000931323, 844035.8000000000465661 1823467.1999999999534339, 844035.0000000000000000 1823567.3000000000465661, 843934.9000000000232831 1823566.5000000000000000, 843934.0000000000000000 1823666.6000000000931323, 844034.0999999999767169 1823667.4000000001396984, 844033.3000000000465661 1823767.6000000000931323, 844133.3500033930176869 1823768.3996004268992692, 844132.5000000000000000 1823868.5000000000000000, 844032.400000000023283
 1 1823867.6999999999534339, 843932.3000000000465661 1823866.8000000000465661, 843931.4640845044050366 1823959.7723790116142482, 843983.0800000000745058 1823934.2700000000186265, 844023.3499999999767169 1823907.5900000000838190, 844032.1073635076172650 1823904.3161411110777408, 844096.6700000000419095 1823880.1799999999348074, 844132.3660955451196060 1823885.2547949166037142, 844156.6700000000419095 1823888.7099999999627471, 844244.6600000000325963 1823901.4699999999720603, 844332.3722259016940370 1823911.2127340587321669, 844371.6900000000605360 1823915.5800000000745058, 844466.6600000000325963 1823931.4100000001490116, 844482.7800000000279397 1823919.5300000000279397, 844583.9899999999906868 1823909.3900000001303852, 844611.1500000000232831 1823893.6000000000931323, 844632.9883521241135895 1823880.0599439740180969, 844633.9000000000232831 1823772.6999999999534339, 844633.0999999999767169 1823872.8000000000465661, 844633.0349857393885031 1823880.0310305394232273, 844644.531920955050
 7367 1823872.9027845042292029, 844733.6479543613968417 1823817.6497105411253870, 844736.9699999999720603 1823815.5900000000838190, 844788.0000000000000000 1823819.0300000000279397, 844829.1300000000046566 1823809.3700000001117587, 844833.8326968360925093 1823807.8463083780370653, 844850.2099999999627471 1823802.5400000000372529, 844923.1300000000046566 1823822.1899999999441206, 844923.0300000000279397 1823833.1999999999534339, 844933.7011916440678760 1823834.0420193299651146, 844933.7011916440678760 1823834.0420193301979452, 844980.0600000000558794 1823837.6999999999534339, 844996.9799999999813735 1823849.8600000001024455, 845016.9100000000325963 1823860.0400000000372529, 844941.4300000000512227 1823906.4399999999441206, 844932.7761059190379456 1823944.7908861120231450), (846531.7000000000698492 1824289.5000000000000000, 846431.5666620586998761 1824288.7005322319455445, 846432.4333310270449147 1824188.6002663818653673, 846532.5000000000000000 1824189.4000000001396984, 846531.7000000
 000698492 1824289.5000000000000000), (845530.5999999999767169 1824281.0000000000000000, 845528.0000000000000000 1824581.3000000000465661, 845529.7000000000698492 1824381.1000000000931323, 845530.5999999999767169 1824281.0000000000000000), (845030.0000000000000000 1824276.6999999999534339, 845029.2000000000698492 1824376.8000000000465661, 845028.3000000000465661 1824476.9000000001396984, 845030.0000000000000000 1824276.6999999999534339), (845028.3000000000465661 1824476.9000000001396984, 844828.1399970820639282 1824475.2003396356012672, 844828.1399972536601126 1824475.2003196582663804, 844928.2000000000698492 1824476.0000000000000000, 845028.3000000000465661 1824476.9000000001396984), (845424.4999999998835847 1824980.8000000000465661, 845724.8000000000465661 1824983.4000000001396984, 845624.7000000000698492 1824982.6000000000931323, 845524.5999999999767169 1824981.6999999999534339, 845424.4999999998835847 1824980.8000000000465661), (845424.4999999998835847 1824980.8000000000465661, 8
 45425.3000000000465661 1824880.7000000001862645, 845426.2000000000698492 1824780.6000000000931323, 845424.4999999998835847 1824980.8000000000465661), (845425.3000000000465661 1824880.7000000001862645, 845325.1999999999534339 1824879.9000000001396984, 845225.0999999998603016 1824879.0000000002328306, 845425.3000000000465661 1824880.7000000001862645), (845924.9994006460765377 1824985.1666614776477218, 845924.9994342236313969 1824985.1666617682203650, 845923.3000000000465661 1825185.4000000001396984, 845924.0999999998603016 1825085.1999999999534339, 845924.9994006460765377 1824985.1666614776477218), (845923.3000000000465661 1825185.4000000001396984, 846023.4000000000232831 1825186.1999999997206032, 846123.4999999979045242 1825187.1000000000931323, 845923.3000000000465661 1825185.4000000001396984), (846023.4000000000232831 1825186.1999999997206032, 846025.0997169703477994 1824986.0333308828994632, 846025.0997336179716513 1824986.0333310270216316, 846024.3000000000465661 1825086.10000000
 03259629, 846023.4000000000232831 1825186.1999999997206032), (846024.3000000000465661 1825086.1000000003259629, 846224.4999999998835847 1825087.8000000002793968, 846124.4000000000232831 1825087.0000000002328306, 846024.3000000000465661 1825086.1000000003259629), (845824.0000000000000000 1825084.3999999999068677, 845823.1999999999534339 1825184.5000000000000000, 845822.3000000000465661 1825284.6000000000931323, 845824.0000000000000000 1825084.3999999999068677), (846223.5999999999767169 1825187.9000000001396984, 846323.7000000000698492 1825188.8000000000465661, 846322.0000000000000000 1825388.9999999997671694, 846221.9000000001396984 1825388.1000000003259629, 846222.7000000000698492 1825288.0000000000000000, 846223.5999999999767169 1825187.9000000001396984)), ((850038.8000000000465661 1823919.1000000000931323, 850038.0000000000000000 1824019.3000000000465661, 850036.2000000000698492 1824219.5000000000000000, 849936.0999999999767169 1824218.6000000000931323, 849937.0000000000000000 182
 4118.5000000000000000, 849937.9000000000232831 1824018.4000000001396984, 849837.8000000000465661 1824017.5000000000000000, 849836.9000000000232831 1824117.6000000000931323, 849838.5999999999767169 1823917.4000000001396984, 849839.5000000000000000 1823817.3000000000465661, 849739.4000000000232831 1823816.5000000000000000, 849738.5000000000000000 1823916.6000000000931323, 849638.4000000000232831 1823915.6999999999534339, 849636.7000000000698492 1824115.9000000001396984, 849536.5999999999767169 1824115.1000000000931323, 849536.2692815386690199 1824154.0469623315148056, 849548.6400000000139698 1824156.1799999999348074, 849586.4300000000512227 1824185.5300000000279397, 849627.0800000000745058 1824231.9399999999441206, 849660.8599999999860302 1824262.2600000000093132, 849680.3636364636477083 1824316.5078648633789271, 849684.3300000000745058 1824327.5400000000372529, 849716.9100000000325963 1824380.8700000001117587, 849723.6433544510509819 1824417.0156312044709921, 849724.5700000000651926 
 1824421.9899999999906868, 849734.1084225099766627 1824428.5586334464605898, 849795.2299999999813735 1824470.6500000001396984, 849833.6494826704729348 1824499.3959808573126793, 849858.9192303767194971 1824518.3031506924889982, 849877.8000000000465661 1824532.4299999999348074, 849918.6099999999860302 1824559.8100000000558794, 849933.1424997501308098 1824572.7773823689203709, 849975.2500000000000000 1824610.3500000000931323, 849989.3334234596695751 1824619.5091916196979582, 850022.0400000000372529 1824640.7800000000279397, 850032.5677580054616556 1824648.9592795723583549, 850097.6199999999953434 1824699.5000000000000000, 850126.2157696812646464 1824720.8470948324538767, 850132.0612414539791644 1824725.2108116219751537, 850231.5010046017123386 1824799.4438215284608305, 850232.1999999999534339 1824721.6999999999534339, 850231.5267270678887144 1824799.4630236667580903, 850261.7699999999022111 1824822.0400000002700835, 850331.0142051535658538 1824873.0456769433803856, 850355.28000000002793
 97 1824890.9199999999254942, 850395.4984792063478380 1824923.3835028100293130, 850412.9500000000698492 1824937.4699999999720603, 850430.4639477027812973 1824949.9542610689532012, 850502.5100000000093132 1825001.3100000002887100, 850529.9193536968668923 1825022.4474388197995722, 850568.1500000000232831 1825051.9299999999348074, 850629.7553476765751839 1825056.1121219883207232, 850703.2300000000977889 1825061.1000000000931323, 850729.6557179262163118 1825081.8907944774255157, 850730.0999999998603016 1825026.3000000000465661, 850731.0000000000000000 1824926.1999999997206032, 850729.6778027521213517 1825081.9081700157839805, 850786.8863288167631254 1825126.9177592005580664, 850829.4000000000232831 1825127.2999999998137355, 850786.9045230898773298 1825126.9320737929083407, 850829.1047918043332174 1825160.1337115378119051, 850843.4500000000698492 1825171.4200000001583248, 850909.2686471390770748 1825228.0858476529829204, 851028.7000000000698492 1825229.1000000000931323, 850928.59999999997
 67169 1825228.3000000000465661, 850909.3160021123476326 1825228.1266174018383026, 850920.9699999999720603 1825238.1599999999161810, 850928.5065637384541333 1825239.9912122096866369, 851028.4189400272443891 1825264.2676291153766215, 851044.8499999999767169 1825268.2600000000093132, 851102.7827544375322759 1825329.8732715183869004, 851110.3300000000745058 1825337.9000000001396984, 851127.8151626735925674 1825350.6580181920435280, 851170.0300000000279397 1825381.4599999999627471, 851221.7600178631255403 1825431.0510890716686845, 851227.1590260977391154 1825436.2268595299683511, 851227.1999999999534339 1825431.1000000000931323, 851228.9000000001396984 1825230.8000000000465661, 851227.1901407483965158 1825436.2566876544151455, 851273.3000000000465661 1825480.4600000001955777, 851301.4500000000698492 1825466.6799999999348074, 851334.4599999999627471 1825469.9700000002048910, 851378.3399999999674037 1825489.3699999998789281, 851378.4700000000884756 1825474.3500000000931323, 851428.38000000
 01210719 1825491.8000000002793968, 851462.1800000000512227 1825520.1200000001117587, 851483.7199999999720603 1825576.3700000001117587, 851533.4000000000232831 1825620.8400000000838190, 851560.1300000000046566 1825655.1100000001024455, 851587.8100000001722947 1825696.3999999999068677, 851598.6156093492172658 1825734.5618786055129021, 851606.2800000000279397 1825761.6300000001210719, 851624.5735819654073566 1825793.3493836307898164, 851626.0100000000093132 1825795.8400000000838190, 851639.5299999999115244 1825853.0200000000186265, 851682.9200000000419095 1825930.4799999999813735, 851721.2454862464219332 1825935.8808557775337249, 851829.5620444538071752 1825936.8006267512682825, 851832.0500000001629815 1825935.7600000000093132, 851862.5999999999767169 1825874.9499999999534339, 851910.9899999999906868 1825836.3200000000651926, 851981.3300000000745058 1825805.8900000001303852, 852025.1445593443932012 1825784.8995315656065941, 852027.1999999999534339 1825538.0000000000000000, 852028.09999
 99998603016 1825437.9000000001396984, 852026.4000000000232831 1825638.1000000003259629, 852025.1534868489252403 1825784.8952546196524054, 852125.6700376782100648 1825736.7402687221765518, 852127.0899999999674037 1825736.0600000000558794, 852226.1585109630832449 1825685.9766200690064579, 852227.4000000000232831 1825539.6999999999534339, 852229.1995466686785221 1825339.5504205159377307, 852228.3000000000465661 1825439.6000000000931323, 852226.5999999999767169 1825639.9000000001396984, 852226.1858489551814273 1825685.9627995418850332, 852249.7699999999022111 1825674.0400000002700835, 852272.2851927585434169 1825640.2651164256967604, 852303.5200000000186265 1825593.4100000001490116, 852327.2517712992848828 1825575.7208152329549193, 852332.7399999998742715 1825571.6300000001210719, 852365.7916617594892159 1825540.9439370818436146, 852387.2300000000977889 1825521.0400000000372529, 852412.2600000001257285 1825521.2600000000093132, 852428.0489484647987410 1825497.8378233269322664, 852457.89
 00000000139698 1825453.5700000000651926, 852474.1630311026237905 1825441.7649393097963184, 852528.9411304481327534 1825402.0268731063697487, 852530.3000000000465661 1825242.0000000000000000, 852529.5000000001164153 1825342.1000000003259629, 852570.0132622728124261 1825342.4642551054712385, 852629.0500000001629815 1825224.7700000000186265, 852630.6628004902740940 1825217.8396128332242370, 852631.3000000000465661 1825142.8000000000465661, 852531.1999999999534339 1825141.8999999996740371, 852532.9000000001396984 1824941.6999999999534339, 852432.8000000000465661 1824940.8000000000465661, 852433.7000000000698492 1824840.7000000001862645, 852434.4999999998835847 1824740.6000000000931323, 852436.2000000000698492 1824540.4000000001396984, 852236.0000000000000000 1824538.6999999999534339, 852336.0999999999767169 1824539.5000000000000000, 852337.8000000000465661 1824339.3000000000465661, 852337.0000000000000000 1824439.4000000001396984, 852637.3000000000465661 1824442.0000000000000000, 852640
 .7000000000698492 1824041.6000000000931323, 852540.5999999999767169 1824040.6999999999534339, 852538.0999999999767169 1824341.0000000000000000, 852438.0003961820621043 1824340.1504277260974050, 852438.8000000000465661 1824240.1000000000931323, 852439.7000000000698492 1824140.0000000000000000, 852440.5000000000000000 1824039.9000000001396984, 852340.4000000000232831 1824039.0000000000000000, 852140.2000000000698492 1824037.3000000000465661, 852040.0999999999767169 1824036.4000000001396984, 852041.0000000000000000 1823936.3000000000465661, 852041.8000000000465661 1823836.1999999999534339, 852141.9000000000232831 1823837.1000000000931323, 852142.8000000000465661 1823737.0000000000000000, 852042.7000000000698492 1823736.1000000000931323, 851942.5999999999767169 1823735.1999999999534339, 851842.5000000000000000 1823734.4000000001396984, 851742.4000000000232831 1823733.5000000000000000, 851642.3000000000465661 1823732.6999999999534339, 851641.4004495161352679 1823832.7500038172584027, 851
 541.3000000000465661 1823831.9000000001396984, 851441.2000000000698492 1823831.1000000000931323, 851341.0999999999767169 1823830.1999999999534339, 851241.0000000000000000 1823829.3000000000465661, 851140.9000000000232831 1823828.5000000000000000, 851140.0000000000000000 1823928.6000000000931323, 851039.9000000000232831 1823927.6999999999534339, 850939.8000000000465661 1823926.9000000001396984, 850938.9000000000232831 1824027.0000000000000000, 851039.0000000000000000 1824027.8000000000465661, 851139.0999999999767169 1824028.6999999999534339, 851239.2000000000698492 1824029.6000000000931323, 851238.4000000000232831 1824129.6999999999534339, 851138.3000000000465661 1824128.8000000000465661, 851137.4000000000232831 1824228.9000000001396984, 851237.5000000000000000 1824229.8000000000465661, 851236.7000000000698492 1824329.9000000001396984, 851136.5999999999767169 1824329.0000000000000000, 851036.5000000000000000 1824328.1999999999534339, 851037.3000000000465661 1824228.1000000000931323, 
 851038.2000000000698492 1824127.9000000001396984, 850938.0999999999767169 1824127.1000000000931323, 850937.2000000000698492 1824227.1999999999534339, 850837.0999999999767169 1824226.3000000000465661, 850737.0000000000000000 1824225.5000000000000000, 850736.0999999999767169 1824325.6000000000931323, 850735.3000000000465661 1824425.6999999999534339, 850935.5000000000000000 1824427.4000000001396984, 850934.5999999999767169 1824527.5000000000000000, 850933.8000000000465661 1824627.6000000000931323, 851033.9000000001396984 1824628.5000000000000000, 850833.7000000000698492 1824626.8000000000465661, 850832.0000000000000000 1824827.0000000002328306, 850831.0999999998603016 1824927.1000000000931323, 850834.4999999998835847 1824526.7000000001862645, 850734.4000000000232831 1824525.8000000002793968, 850732.7000000000698492 1824726.0000000000000000, 850632.5999999999767169 1824725.1999999999534339, 850633.5000000000000000 1824625.0000000000000000, 850634.3000000000465661 1824524.900000000139698
 4, 850635.2000000000698492 1824424.8000000000465661, 850535.0999999999767169 1824424.0000000000000000, 850535.9000000000232831 1824323.9000000001396984, 850485.8499998252373189 1824323.4499999985564500, 850636.0000000000000000 1824324.6999999999534339, 850637.7000000000698492 1824124.5000000000000000, 850537.5999999999767169 1824123.6999999999534339, 850538.5000000000000000 1824023.5000000000000000, 850539.4000000000232831 1823923.4000000001396984, 850540.2000000000698492 1823823.3000000000465661, 850440.0999999999767169 1823822.5000000000000000, 850340.0000000000000000 1823821.6000000000931323, 850239.9000000000232831 1823820.8000000000465661, 850238.2000000000698492 1824021.0000000000000000, 850138.0999999999767169 1824020.1000000000931323, 850138.9000000000232831 1823920.0000000000000000, 850038.8000000000465661 1823919.1000000000931323), (852028.0999999998603016 1825437.9000000001396984, 852028.9000000001396984 1825337.8000000002793968, 852129.0000000000000000 1825338.7000000001
 862645, 852128.1500038170488551 1825438.7995504839345813, 852028.0999999998603016 1825437.9000000001396984), (852530.3000000000465661 1825242.0000000000000000, 852330.1499963951064274 1825240.3004245448391885, 852330.1499966070987284 1825240.3003995732869953, 852430.1999999999534339 1825241.1000000000931323, 852530.3000000000465661 1825242.0000000000000000), (852432.8000000000465661 1824940.8000000000465661, 852431.0999999998603016 1825140.9999999997671694, 852431.9000000001396984 1825040.9000000001396984, 852432.8000000000465661 1824940.8000000000465661), (851842.5000000000000000 1823734.4000000001396984, 851840.7000000000698492 1823934.6000000000931323, 851841.5999999999767169 1823834.5000000000000000, 851842.5000000000000000 1823734.4000000001396984), (851840.7000000000698492 1823934.6000000000931323, 851640.5000000000000000 1823932.9000000001396984, 851740.5999999999767169 1823933.6999999999534339, 851840.7000000000698492 1823934.6000000000931323), (851640.5000000000000000 18239
 32.9000000001396984, 851639.7000000000698492 1824033.0000000000000000, 851638.8000000000465661 1824133.1000000000931323, 851640.5000000000000000 1823932.9000000001396984), (851639.7000000000698492 1824033.0000000000000000, 851839.9000000000232831 1824034.6999999999534339, 851739.8000000000465661 1824033.9000000001396984, 851639.7000000000698492 1824033.0000000000000000), (851839.9000000000232831 1824034.6999999999534339, 851940.0000000000000000 1824035.6000000000931323, 851939.0999999999767169 1824135.6999999999534339, 851839.0000000000000000 1824134.8000000000465661, 851839.9000000000232831 1824034.6999999999534339), (851939.0999999999767169 1824135.6999999999534339, 851938.3000000000465661 1824235.8000000000465661, 852038.4000000000232831 1824236.6000000000931323, 852037.5000000000000000 1824336.6999999999534339, 851937.4000000000232831 1824335.9000000001396984, 851939.0999999999767169 1824135.6999999999534339), (851638.8000000000465661 1824133.1000000000931323, 851438.60000023408
 79291 1824131.4000000020023435, 851538.7000000000698492 1824132.1999999999534339, 851638.8000000000465661 1824133.1000000000931323), (851541.3000000000465661 1823831.9000000001396984, 851539.9999999993015081 1823982.0500000873580575, 851540.4000000000232831 1823932.0000000000000000, 851541.3000000000465661 1823831.9000000001396984), (851239.2000000000698492 1824029.6000000000931323, 851339.4000000000232831 1824030.4000000001396984, 851439.5000000000000000 1824031.3000000000465661, 851239.2000000000698492 1824029.6000000000931323), (850736.0999999999767169 1824325.6000000000931323, 850836.2000000000698492 1824326.4000000001396984, 850936.4000000000232831 1824327.3000000000465661, 850736.0999999999767169 1824325.6000000000931323), (850535.0999999999767169 1824424.0000000000000000, 850334.9000000000232831 1824422.3000000000465661, 850435.0000000000000000 1824423.1000000000931323, 850535.0999999999767169 1824424.0000000000000000), (851134.0000000000000000 1824629.2999999998137355, 85113
 4.8000000000465661 1824529.1999999999534339, 851235.0000000000000000 1824530.1000000000931323, 851234.0999999998603016 1824630.1999999997206032, 851134.0000000000000000 1824629.2999999998137355), (851235.0000000000000000 1824530.1000000000931323, 851235.8000000000465661 1824430.0000000000000000, 851335.9000000000232831 1824430.8000000000465661, 851436.0000000000000000 1824431.6999999999534339, 851435.1999999999534339 1824531.8000000002793968, 851335.0999999999767169 1824531.0000000000000000, 851235.0000000000000000 1824530.1000000000931323), (851435.1999999999534339 1824531.8000000002793968, 851433.5000000001164153 1824732.0000000000000000, 851434.3000000000465661 1824631.9000000001396984, 851435.1999999999534339 1824531.8000000002793968), (851833.9000000001396984 1824735.5000000000000000, 851934.0000000000000000 1824736.3000000000465661, 852134.1999999999534339 1824738.0000000000000000, 852034.0999999998603016 1824737.1999999999534339, 851833.9000000001396984 1824735.50000000000000
 00), (852134.1999999999534339 1824738.0000000000000000, 852234.3000000000465661 1824738.9000000001396984, 852334.4000000000232831 1824739.6999999999534339, 852333.5999999999767169 1824839.9000000001396984, 852233.4000000000232831 1824839.0000000002328306, 852033.1999999999534339 1824837.2999999998137355, 852133.3000000000465661 1824838.1000000003259629, 852134.1999999999534339 1824738.0000000000000000), (851833.9000000001396984 1824735.5000000000000000, 851832.1999999999534339 1824935.6999999999534339, 851833.0000000000000000 1824835.6000000000931323, 851833.9000000001396984 1824735.5000000000000000), (851934.8000000000465661 1824636.1999999999534339, 851936.5999999999767169 1824436.0000000000000000, 851935.7000000000698492 1824536.1000000000931323, 851934.8000000000465661 1824636.1999999999534339), (851935.7000000000698492 1824536.1000000000931323, 852135.9000000000232831 1824537.8000000000465661, 852035.8000000000465661 1824537.0000000000000000, 851935.7000000000698492 1824536.100
 0000000931323), (850338.3000000000465661 1824021.8000000000465661, 850336.9947843523696065 1824172.6026079109869897, 850337.4000000000232831 1824121.9000000001396984, 850338.3000000000465661 1824021.8000000000465661), (852138.5000000000000000 1824237.5000000000000000, 852137.2000000000698492 1824387.6499999999068677, 852137.5999999999767169 1824337.6000000000931323, 852138.5000000000000000 1824237.5000000000000000), (851336.8000000000465661 1824330.6999999999534339, 851537.0000000000000000 1824332.5000000000000000, 851436.9000000000232831 1824331.6000000000931323, 851336.8000000000465661 1824330.6999999999534339), (850333.0999999998603016 1824622.5000000000000000, 850433.2000000000698492 1824623.3000000000465661, 850533.4000000000232831 1824624.1999999997206032, 850333.0999999998603016 1824622.5000000000000000), (851532.7000000000698492 1824832.9999999997671694, 851531.0000000000000000 1825033.1999999999534339, 851531.8000000000465661 1824933.1000000000931323, 851532.700000000069849
 2 1824832.9999999997671694), (852131.6495722740655765 1825038.4003961817361414, 852231.7000000000698492 1825039.1999999999534339, 852131.6495722740655765 1825038.4003961822018027, 852131.6495722740655765 1825038.4003961817361414), (851430.0000000000000000 1825132.5000000000000000, 851430.9000000001396984 1825032.3000000000465661, 851429.2000000019324943 1825232.5999997649341822, 851430.0000000000000000 1825132.5000000000000000), (852230.9000004681292921 1825139.3000000037718564, 852431.0999995357124135 1825140.9999999958090484, 852331.0000000000000000 1825140.1999999997206032, 852230.9000004681292921 1825139.3000000037718564), (851228.9000002334360033 1825230.8000000023748726, 851329.0999999998603016 1825231.6999999999534339, 851429.1999999999534339 1825232.6000000000931323, 851228.9000002334360033 1825230.8000000023748726)), ((848367.0000000000000000 1820400.8000000000465661, 848366.2000000000698492 1820500.9000000001396984, 848566.4000000000232831 1820502.6000000000931323, 848567.
 3000000000465661 1820402.5000000000000000, 848367.0000000000000000 1820400.8000000000465661)), ((840536.4000000000232831 1822936.6999999999534339, 840535.5000000000000000 1823036.8000000000465661, 840135.0999999999767169 1823033.3000000000465661, 840133.4000000000232831 1823233.6000000000931323, 840433.7000000000698492 1823236.1000000000931323, 840434.5999999999767169 1823136.0000000000000000, 840634.8000000000465661 1823137.6999999999534339, 840636.5000000000000000 1822937.5000000000000000, 840536.4000000000232831 1822936.6999999999534339)), ((842338.3000000000465661 1822952.1000000000931323, 842337.5000000000000000 1823052.1999999999534339, 842437.5999999999767169 1823053.1000000000931323, 842438.4000000000232831 1822953.0000000000000000, 842338.3000000000465661 1822952.1000000000931323)), ((843239.3000000000465661 1822959.8000000000465661, 843238.4000000000232831 1823059.9000000001396984, 843338.5000000000000000 1823060.8000000000465661, 843339.4000000000232831 1822960.6999999999
 534339, 843239.3000000000465661 1822959.8000000000465661)), ((845041.2000000000698492 1822975.3000000000465661, 845040.3000000000465661 1823075.4000000001396984, 845140.5000000000000000 1823076.1999999999534339, 845141.3000000000465661 1822976.1000000000931323, 845041.2000000000698492 1822975.3000000000465661)), ((848645.0999999999767169 1823006.1999999999534339, 848644.2000000000698492 1823106.3000000000465661, 848744.3000000000465661 1823107.1000000000931323, 848743.4000000000232831 1823207.1999999999534339, 848843.5999999999767169 1823208.1000000000931323, 848845.3000000000465661 1823007.9000000001396984, 848745.2000000000698492 1823007.0000000000000000, 848645.0999999999767169 1823006.1999999999534339)), ((849045.5000000000000000 1823009.6000000000931323, 849044.5999999999767169 1823109.6999999999534339, 849144.7000000000698492 1823110.6000000000931323, 849143.9000000000232831 1823210.6999999999534339, 849244.0000000000000000 1823211.5000000000000000, 849244.8000000000465661 182
 3111.4000000001396984, 849245.7000000000698492 1823011.3000000000465661, 849145.5999999999767169 1823010.5000000000000000, 849045.5000000000000000 1823009.6000000000931323)), ((845241.4000000000232831 1822977.0000000000000000, 845240.5999999999767169 1823077.1000000000931323, 845540.9000000000232831 1823079.6999999999534339, 845541.7000000000698492 1822979.6000000000931323, 845241.4000000000232831 1822977.0000000000000000)), ((843237.5999999999767169 1823160.0000000000000000, 843236.7000000000698492 1823260.1999999999534339, 843336.8000000000465661 1823261.0000000000000000, 843337.7000000000698492 1823160.9000000001396984, 843237.5999999999767169 1823160.0000000000000000)), ((847869.2781056958483532 1823700.3483764692209661, 847875.5000000000000000 1823712.3500000000931323, 847885.5300000000279397 1823709.4299999999348074, 847894.9714689536485821 1823700.5537180337123573, 847869.2781056958483532 1823700.3483764692209661)), ((847644.0000000000000000 1822997.6000000000931323, 847643.0
 999999999767169 1823097.6999999999534339, 847743.2000000000698492 1823098.6000000000931323, 847742.4000000000232831 1823198.6999999999534339, 847642.3000000000465661 1823197.8000000000465661, 847641.4000000000232831 1823297.9000000001396984, 847541.3000000000465661 1823297.1000000000931323, 847543.0000000000000000 1823096.8000000000465661, 847442.9000000000232831 1823096.0000000000000000, 847443.8000000000465661 1822995.9000000001396984, 847243.5999999999767169 1822994.1999999999534339, 847242.7000000000698492 1823094.3000000000465661, 847342.8000000000465661 1823095.1000000000931323, 847341.9000000000232831 1823195.1999999999534339, 847141.7000000000698492 1823193.5000000000000000, 847140.8500036050099880 1823293.5995754553005099, 846940.7000000000698492 1823291.9000000001396984, 846939.8000000000465661 1823392.0000000000000000, 846970.2753116589738056 1823392.2587813676800579, 846981.2199999999720603 1823389.3200000000651926, 847004.9253986178664491 1823392.5530128753744066, 84714
 0.0000000000000000 1823393.6999999999534339, 847139.4488143305061385 1823462.6671069087460637, 847145.7199999999720603 1823470.8200000000651926, 847161.3523601859342307 1823493.9881069546099752, 847339.3672460824018344 1823495.4997218698263168, 847339.3672459408408031 1823495.4997382292058319, 847239.3000000000465661 1823494.6999999999534339, 847238.9143226962769404 1823537.5958867857698351, 847253.3200000000651926 1823531.8100000000558794, 847271.3599999999860302 1823528.9599999999627471, 847292.3499999999767169 1823533.1500000001396984, 847302.5400000000372529 1823512.2099999999627471, 847310.6600000000325963 1823500.2700000000186265, 847332.6400000000139698 1823504.4599999999627471, 847339.2866948893060908 1823504.8064827919006348, 847355.6600000000325963 1823505.6600000001490116, 847435.1600000000325963 1823458.2800000000279397, 847451.1400000000139698 1823462.4299999999348074, 847463.9699999999720603 1823484.5600000000558794, 847449.5800000000745058 1823528.4899999999906868, 84
 7435.2600000000093132 1823563.4100000001490116, 847426.0999999999767169 1823580.3500000000931323, 847434.9300000000512227 1823602.4499999999534339, 847438.5469397746492177 1823602.7486218325793743, 847438.5999999999767169 1823596.5000000000000000, 847939.2000000000698492 1823600.8000000000465661, 848039.3000000000465661 1823601.6999999999534339, 848139.4000000000232831 1823602.5000000000000000, 848140.1996004268294200 1823502.4499966071452945, 848240.3000000000465661 1823503.3000000000465661, 848241.2000000000698492 1823403.1999999999534339, 848341.3000000000465661 1823404.0000000000000000, 848342.2000000000698492 1823303.9000000001396984, 848242.0999999999767169 1823303.1000000000931323, 848242.9000000000232831 1823203.0000000000000000, 848142.8000000000465661 1823202.1000000000931323, 848143.7000000000698492 1823102.0000000000000000, 848043.5999999999767169 1823101.1000000000931323, 847943.4004533312981948 1823100.2495794841088355, 847944.3000000000465661 1823000.1999999999534339,
  847844.2000000000698492 1822999.3000000000465661, 847744.0999999999767169 1822998.4000000001396984, 847644.0000000000000000 1822997.6000000000931323), (847840.8000000000465661 1823399.6999999999534339, 848041.0000000000000000 1823401.4000000001396984, 847940.9000000000232831 1823400.6000000000931323, 847740.7000000000698492 1823398.9000000001396984, 847840.8000000000465661 1823399.6999999999534339), (847340.2000000000698492 1823395.4000000001396984, 847341.0999999999767169 1823295.3000000000465661, 847339.7947843535803258 1823446.1026077666319907, 847340.2000000000698492 1823395.4000000001396984)), ((840534.7000000000698492 1823136.9000000001396984, 840533.8000000000465661 1823237.0000000000000000, 840533.0000000000000000 1823337.1000000000931323, 840633.0999999999767169 1823338.0000000000000000, 840633.9000000000232831 1823237.9000000001396984, 840634.8000000000465661 1823137.6999999999534339, 840534.7000000000698492 1823136.9000000001396984)), ((848343.0000000000000000 1823203.80
 00000000465661, 848342.2000000000698492 1823303.9000000001396984, 848442.3000000000465661 1823304.8000000000465661, 848441.4000000000232831 1823404.9000000001396984, 848440.5000000000000000 1823505.0000000000000000, 848439.7000000000698492 1823605.1000000000931323, 848539.8000000000465661 1823606.0000000000000000, 848639.9000000000232831 1823606.8000000000465661, 848740.0000000000000000 1823607.6999999999534339, 848940.2000000000698492 1823609.4000000001396984, 848941.9000000000232831 1823409.1999999999534339, 848942.8000000000465661 1823309.1000000000931323, 848842.7000000000698492 1823308.1999999999534339, 848742.5999999999767169 1823307.3000000000465661, 848741.7000000000698492 1823407.5000000000000000, 848641.5999999999767169 1823406.6000000000931323, 848642.5000000000000000 1823306.5000000000000000, 848542.4000000000232831 1823305.6000000000931323, 848543.2000000000698492 1823205.5000000000000000, 848443.0999999999767169 1823204.6999999999534339, 848343.0000000000000000 1823203
 .8000000000465661)), ((847005.1010217635193840 1823392.5769648831337690, 847028.2199999999720603 1823395.7299999999813735, 847088.0200000000186265 1823427.2800000000279397, 847127.8900000000139698 1823447.6400000001303852, 847139.4147413723403588 1823462.6228101521264762, 847140.0000000000000000 1823393.6999999999534339, 847005.1010217635193840 1823392.5769648831337690)), ((846839.2453886438161135 1823441.7628852878697217, 846860.8100000000558794 1823421.3200000000651926, 846883.9100000000325963 1823412.5100000000093132, 846908.9699999999720603 1823408.7199999999720603, 846970.1732329026563093 1823392.2861907500773668, 846839.7000000000698492 1823391.1999999999534339, 846739.5999999999767169 1823390.3000000000465661, 846738.9457818951923400 1823463.0635914430022240, 846748.3300000000745058 1823461.4100000001490116, 846784.3000000000465661 1823470.7299999999813735, 846832.5500000000465661 1823448.1100000001024455, 846839.2453886438161135 1823441.7628852878697217)), ((846537.793277895
 7765549 1823577.8151560502592474, 846632.6099999999860302 1823530.4899999999906868, 846638.3011996189597994 1823526.8873976771719754, 846663.8100000000558794 1823510.7399999999906868, 846680.9333718657726422 1823489.8806197270750999, 846638.6499961829977110 1823489.5004495161119848, 846639.5000000000000000 1823389.4000000001396984, 846539.4000000000232831 1823388.6000000000931323, 846537.7932778957765549 1823577.8151560502592474)), ((846774.3828207085607573 1824491.8535554548725486, 846781.7000000000698492 1824475.8500000000931323, 846742.8800000000046566 1824449.4899999999906868, 846730.5065471010748297 1824446.2829279752913862, 846730.0999999999767169 1824491.5000000000000000, 846774.3828207085607573 1824491.8535554548725486)), ((840285.5496141483308747 1825237.1534434701316059, 840321.1199999999953434 1825186.3500000000931323, 840349.7292272578924894 1825137.6253730582538992, 840217.1999999999534339 1825136.5000000000000000, 840216.3000000000465661 1825236.6000000000931323, 84016
 4.7065963832428679 1825236.1361232441850007, 840198.2300000000977889 1825273.4000000001396984, 840216.0324496603570879 1825270.0772362546995282, 840244.3599999999860302 1825264.7900000000372529, 840276.5200000000186265 1825250.0500000000465661, 840285.5496141483308747 1825237.1534434701316059)), ((840776.0005421064561233 1824640.6855193595401943, 840779.5899999999674037 1824607.6200000001117587, 840807.0999999999767169 1824552.7900000000372529, 840806.3712267073569819 1824540.8504905498120934, 840722.9000000000232831 1824540.1000000000931323, 840722.0000000000000000 1824640.1999999997206032, 840721.1999999999534339 1824740.3000000000465661, 840720.3000000000465661 1824840.3999999999068677, 840777.3063839530805126 1824840.9125449107959867, 840785.6900000001769513 1824830.9299999997019768, 840786.8100000001722947 1824816.9199999999254942, 840778.1500000000232831 1824776.8000000000465661, 840794.4599999999627471 1824741.9000000001396984, 840794.1298595240805298 1824740.9557130229659379
 , 840771.9899999999906868 1824677.6300000001210719, 840776.0005421064561233 1824640.6855193595401943)), ((846747.9607268684776500 1824591.7584577207453549, 846760.2700000000186265 1824522.7199999999720603, 846774.3726710098562762 1824491.8757540725637227, 846730.0999999999767169 1824491.5000000000000000, 846729.3000000000465661 1824591.6000000000931323, 846728.6535641215741634 1824667.7273310977034271, 846739.2399999999906868 1824640.6699999999254942, 846747.9607268683612347 1824591.7584577207453549, 846747.9607268684776500 1824591.7584577207453549)), ((852337.0000000000000000 1824439.4000000001396984, 852336.0999999999767169 1824539.5000000000000000, 852436.2000000000698492 1824540.4000000001396984, 852437.0999999999767169 1824440.3000000000465661, 852337.0000000000000000 1824439.4000000001396984)), ((840420.8000000000465661 1824737.6999999999534339, 840420.0000000000000000 1824837.8000000002793968, 840620.1999999999534339 1824839.6000000000931323, 840621.0999999998603016 1824739.5
 000000000000000, 840420.8000000000465661 1824737.6999999999534339)), ((840418.1109029258368537 1825059.1317967977374792, 840498.3599999999860302 1825064.7299999999813735, 840518.2380844965809956 1825056.9086021005641669, 840518.2380844965809956 1825056.9086021010298282, 840555.6199999998789281 1825042.1999999997206032, 840618.2927486911648884 1825062.8509511181619018, 840618.4999999998835847 1825039.8000000002793968, 840618.3042305267881602 1825062.8547344340477139, 840630.4899999999906868 1825066.8700000001117587, 840706.5500000000465661 1824953.3900000001303852, 840733.0999999998603016 1824893.5500000002793968, 840777.2884344332851470 1824840.9339177750516683, 840620.1999999999534339 1824839.6000000000931323, 840619.3000000000465661 1824939.6999999999534339, 840319.0000000000000000 1824937.1000000000931323, 840318.1999999999534339 1825037.1999999999534339, 840317.3000000000465661 1825137.2999999998137355, 840349.7489700233563781 1825137.5917489812709391, 840359.7199999999720603 18
 25120.6100000001024455, 840367.2199999999720603 1825063.6099999998696148, 840400.3100000000558794 1825057.8900000001303852, 840418.1109029258368537 1825059.1317967977374792)), ((840125.7000000000698492 1824134.5000000000000000, 840124.8000000000465661 1824234.6000000000931323, 840224.9000000000232831 1824235.5000000000000000, 840225.8000000000465661 1824135.4000000001396984, 840125.7000000000698492 1824134.5000000000000000)), ((849436.1068061739206314 1824157.9318911028094590, 849493.6600000000325963 1824146.6999999999534339, 849536.2498576241778210 1824154.0436131369788200, 849536.5999999999767169 1824115.1000000000931323, 849436.5000000000000000 1824114.1999999999534339, 849436.1068061739206314 1824157.9318911028094590)), ((840525.2000000000698492 1824238.1000000000931323, 840524.4000000000232831 1824338.1999999999534339, 840624.5000000000000000 1824339.0000000000000000, 840625.3000000000465661 1824238.9000000001396984, 840525.2000000000698492 1824238.1000000000931323)), ((840130.
 0000000000000000 1823634.0000000000000000, 840129.0999999999767169 1823734.1000000000931323, 840128.2000000000698492 1823834.1999999999534339, 840127.4000000000232831 1823934.3000000000465661, 840227.5000000000000000 1823935.1999999999534339, 840327.5999999999767169 1823936.0000000000000000, 840329.3000000000465661 1823735.8000000000465661, 840229.2004490676335990 1823734.9500038132537156, 840230.0999999999767169 1823634.8000000000465661, 840130.0000000000000000 1823634.0000000000000000)), ((846738.2359706806018949 1823790.7183054306078702, 846736.2241999210091308 1823787.8501034213695675, 846736.2000000000698492 1823790.6999999999534339, 846738.2359706806018949 1823790.7183054306078702)), ((845534.0000000000000000 1823880.5000000000000000, 845634.0999999999767169 1823881.4000000001396984, 845635.0000000000000000 1823781.3000000000465661, 845534.9000000000232831 1823780.4000000001396984, 845534.0000000000000000 1823880.5000000000000000)), ((849439.0000000000000000 1823813.9000000001
 396984, 849438.2000000000698492 1823914.0000000000000000, 849437.3000000000465661 1824014.1000000000931323, 849537.4000000000232831 1824015.0000000000000000, 849538.3000000000465661 1823914.9000000001396984, 849539.0999999999767169 1823814.8000000000465661, 849439.0000000000000000 1823813.9000000001396984)), ((840627.9000000000232831 1823938.6000000000931323, 840628.8000000000465661 1823838.5000000000000000, 840528.7000000000698492 1823837.6000000000931323, 840527.8000000000465661 1823937.6999999999534339, 840427.7000000000698492 1823936.9000000001396984, 840426.0000000000000000 1824137.1000000000931323, 840325.9000000000232831 1824136.1999999999534339, 840325.0000000000000000 1824236.3000000000465661, 840525.2000000000698492 1824238.1000000000931323, 840526.0999999999767169 1824138.0000000000000000, 840626.2000000000698492 1824138.8000000000465661, 840627.0999999999767169 1824038.6999999999534339, 840627.9000000000232831 1823938.6000000000931323)), ((852442.2000000000698492 1823839
 .6000000000931323, 852441.4000000000232831 1823939.8000000000465661, 852341.3000000000465661 1823938.9000000001396984, 852340.4000000000232831 1824039.0000000000000000, 852540.5999999999767169 1824040.6999999999534339, 852542.4000000000232831 1823840.5000000000000000, 852442.2000000000698492 1823839.6000000000931323)), ((852141.9000000000232831 1823837.1000000000931323, 852141.0999999999767169 1823937.1999999999534339, 852140.2000000000698492 1824037.3000000000465661, 852240.3000000000465661 1824038.1000000000931323, 852241.2000000000698492 1823938.0000000000000000, 852242.0000000000000000 1823837.9000000001396984, 852141.9000000000232831 1823837.1000000000931323)), ((845433.9000000000232831 1823879.6999999999534339, 845433.0000000000000000 1823979.8000000000465661, 845533.2000000000698492 1823980.6000000000931323, 845534.0000000000000000 1823880.5000000000000000, 845433.9000000000232831 1823879.6999999999534339)), ((845238.8000000000465661 1823277.3000000000465661, 845237.099999999
 9767169 1823477.5000000000000000, 845337.2000000000698492 1823478.4000000001396984, 845336.4000000000232831 1823578.5000000000000000, 845236.3000000000465661 1823577.6000000000931323, 845235.4000000000232831 1823677.6999999999534339, 845135.3000000000465661 1823676.9000000001396984, 845134.4000000000232831 1823777.0000000000000000, 845234.5999999999767169 1823777.8000000000465661, 845334.7000000000698492 1823778.6999999999534339, 845335.5000000000000000 1823678.6000000000931323, 845635.8000000000465661 1823681.1999999999534339, 845635.0000000000000000 1823781.3000000000465661, 845735.0999999999767169 1823782.1000000000931323, 845737.7000000000698492 1823481.8000000000465661, 845537.4000000000232831 1823480.1000000000931323, 845539.2000000000698492 1823279.9000000001396984, 845338.9000000000232831 1823278.1999999999534339, 845238.8000000000465661 1823277.3000000000465661)), ((852345.5999999999767169 1823438.4000000001396984, 852343.9000000000232831 1823638.6000000000931323, 852342.09
 99999999767169 1823838.8000000000465661, 852442.2000000000698492 1823839.6000000000931323, 852444.0000000000000000 1823639.4000000001396984, 852445.7000000000698492 1823439.1999999999534339, 852345.5999999999767169 1823438.4000000001396984)), ((840331.0000000000000000 1823535.6000000000931323, 840330.2000000000698492 1823635.6999999999534339, 840430.2500038170255721 1823636.5995504839811474, 840429.4000000000232831 1823736.6999999999534339, 840329.3000000000465661 1823735.8000000000465661, 840328.5000000000000000 1823835.9000000001396984, 840428.5999999999767169 1823836.8000000000465661, 840528.7000000000698492 1823837.6000000000931323, 840529.5000000000000000 1823737.5000000000000000, 840531.2000000000698492 1823537.3000000000465661, 840431.0999999999767169 1823536.5000000000000000, 840331.0000000000000000 1823535.6000000000931323)), ((840225.8000000000465661 1824135.4000000001396984, 840325.9000000000232831 1824136.1999999999534339, 840326.7000000000698492 1824036.1000000000931323
 , 840226.5999999999767169 1824035.3000000000465661, 840225.8000000000465661 1824135.4000000001396984)), ((843460.0730511258589104 1823962.8622951649595052, 843444.5400000000372529 1824040.7800000000279397, 843519.4599999999627471 1824060.4499999999534339, 843528.0111173285404220 1824063.5803197363857180, 843528.0111173287732527 1824063.5803197363857180, 843620.2600000000093132 1824097.3500000000931323, 843667.4100000000325963 1824085.7399999999906868, 843767.7299999999813735 1824062.5700000000651926, 843780.8399999999674037 1824051.6699999999254942, 843825.2199999999720603 1824013.0100000000093132, 843877.5100000000093132 1823986.4299999999348074, 843917.2201316761784256 1823966.8100277709309012, 843731.2000000000698492 1823965.1999999999534339, 843730.4000000000232831 1824065.3000000000465661, 843530.2002663819584996 1824063.5666689730715007, 843531.0000000000000000 1823963.5000000000000000, 843460.0730511258589104 1823962.8622951649595052)), ((850638.5999999999767169 1824024.40000
 00001396984, 850637.7000000000698492 1824124.5000000000000000, 850838.0000000000000000 1824126.1999999999534339, 850838.8000000000465661 1824026.1000000000931323, 850638.5999999999767169 1824024.4000000001396984)))
-  </op>
+MULTIPOLYGON (((851642.3000000000465661 1823732.6999999999534339, 851641.4004495161352679 1823832.7500038172584027, 851541.3000000000465661 1823831.9000000001396984, 851441.2000000000698492 1823831.1000000000931323, 851341.0999999999767169 1823830.1999999999534339, 851241.0000000000000000 1823829.3000000000465661, 851140.9000000000232831 1823828.5000000000000000, 851140.0000000000000000 1823928.6000000000931323, 851039.9000000000232831 1823927.6999999999534339, 850939.8000000000465661 1823926.9000000001396984, 850938.9000000000232831 1824027.0000000000000000, 851039.0000000000000000 1824027.8000000000465661, 851139.0999999999767169 1824028.6999999999534339, 851239.2000000000698492 1824029.6000000000931323, 851238.4000000000232831 1824129.6999999999534339, 851138.3000000000465661 1824128.8000000000465661, 851137.4000000000232831 1824228.9000000001396984, 851237.5000000000000000 1824229.8000000000465661, 851236.7000000000698492 1824329.9000000001396984, 851136.5999999999767169 1824329
 .0000000000000000, 851036.5000000000000000 1824328.1999999999534339, 851037.3000000000465661 1824228.1000000000931323, 851038.2000000000698492 1824127.9000000001396984, 850938.0999999999767169 1824127.1000000000931323, 850937.2000000000698492 1824227.1999999999534339, 850837.0999999999767169 1824226.3000000000465661, 850737.0000000000000000 1824225.5000000000000000, 850736.0999999999767169 1824325.6000000000931323, 850735.3000000000465661 1824425.6999999999534339, 850935.5000000000000000 1824427.4000000001396984, 850934.5999999999767169 1824527.5000000000000000, 850933.8000000000465661 1824627.6000000000931323, 851033.9000000001396984 1824628.5000000000000000, 850833.7000000000698492 1824626.8000000000465661, 850832.0000000000000000 1824827.0000000002328306, 850831.0999999998603016 1824927.1000000000931323, 850834.4999999998835847 1824526.7000000001862645, 850734.4000000000232831 1824525.8000000002793968, 850732.7000000000698492 1824726.0000000000000000, 850632.5999999999767169 1824
 725.1999999999534339, 850633.5000000000000000 1824625.0000000000000000, 850634.3000000000465661 1824524.9000000001396984, 850635.2000000000698492 1824424.8000000000465661, 850535.0999999999767169 1824424.0000000000000000, 850535.9000000000232831 1824323.9000000001396984, 850485.8499998252373189 1824323.4499999985564500, 850636.0000000000000000 1824324.6999999999534339, 850637.7000000000698492 1824124.5000000000000000, 850537.5999999999767169 1824123.6999999999534339, 850538.5000000000000000 1824023.5000000000000000, 850539.4000000000232831 1823923.4000000001396984, 850540.2000000000698492 1823823.3000000000465661, 850440.0999999999767169 1823822.5000000000000000, 850340.0000000000000000 1823821.6000000000931323, 850239.9000000000232831 1823820.8000000000465661, 850238.2000000000698492 1824021.0000000000000000, 850138.0999999999767169 1824020.1000000000931323, 850138.9000000000232831 1823920.0000000000000000, 850038.8000000000465661 1823919.1000000000931323, 850038.0000000000000000 1
 824019.3000000000465661, 850036.2000000000698492 1824219.5000000000000000, 849936.0999999999767169 1824218.6000000000931323, 849937.0000000000000000 1824118.5000000000000000, 849937.9000000000232831 1824018.4000000001396984, 849837.8000000000465661 1824017.5000000000000000, 849836.9000000000232831 1824117.6000000000931323, 849838.5999999999767169 1823917.4000000001396984, 849839.5000000000000000 1823817.3000000000465661, 849739.4000000000232831 1823816.5000000000000000, 849738.5000000000000000 1823916.6000000000931323, 849638.4000000000232831 1823915.6999999999534339, 849636.7000000000698492 1824115.9000000001396984, 849536.5999999999767169 1824115.1000000000931323, 849536.2692815386690199 1824154.0469623315148056, 849548.6400000000139698 1824156.1799999999348074, 849586.4300000000512227 1824185.5300000000279397, 849627.0800000000745058 1824231.9399999999441206, 849660.8599999999860302 1824262.2600000000093132, 849680.3636364636477083 1824316.5078648633789271, 849684.330000000074505
 8 1824327.5400000000372529, 849716.9100000000325963 1824380.8700000001117587, 849723.6433544510509819 1824417.0156312044709921, 849724.5700000000651926 1824421.9899999999906868, 849734.1084225099766627 1824428.5586334464605898, 849795.2299999999813735 1824470.6500000001396984, 849833.6494826704729348 1824499.3959808573126793, 849858.9192303767194971 1824518.3031506924889982, 849877.8000000000465661 1824532.4299999999348074, 849918.6099999999860302 1824559.8100000000558794, 849933.1424997501308098 1824572.7773823689203709, 849975.2500000000000000 1824610.3500000000931323, 849989.3334234596695751 1824619.5091916196979582, 850022.0400000000372529 1824640.7800000000279397, 850032.5677580054616556 1824648.9592795723583549, 850097.6199999999953434 1824699.5000000000000000, 850126.2157696812646464 1824720.8470948324538767, 850132.0612414539791644 1824725.2108116219751537, 850231.5010046017123386 1824799.4438215284608305, 850232.1999999999534339 1824721.6999999999534339, 850231.526727067888
 7144 1824799.4630236667580903, 850261.7699999999022111 1824822.0400000002700835, 850331.0142051535658538 1824873.0456769433803856, 850355.2800000000279397 1824890.9199999999254942, 850395.4984792063478380 1824923.3835028100293130, 850412.9500000000698492 1824937.4699999999720603, 850430.4639477027812973 1824949.9542610689532012, 850502.5100000000093132 1825001.3100000002887100, 850529.9193536968668923 1825022.4474388197995722, 850568.1500000000232831 1825051.9299999999348074, 850629.7553476765751839 1825056.1121219883207232, 850703.2300000000977889 1825061.1000000000931323, 850729.6557179262163118 1825081.8907944774255157, 850730.0999999998603016 1825026.3000000000465661, 850731.0000000000000000 1824926.1999999997206032, 850729.6778027521213517 1825081.9081700157839805, 850786.8863288167631254 1825126.9177592005580664, 850829.4000000000232831 1825127.2999999998137355, 850786.9045230898773298 1825126.9320737929083407, 850829.1047918043332174 1825160.1337115378119051, 850843.450000000
 0698492 1825171.4200000001583248, 850909.2686471390770748 1825228.0858476529829204, 851028.7000000000698492 1825229.1000000000931323, 850928.5999999999767169 1825228.3000000000465661, 850909.3160021123476326 1825228.1266174018383026, 850920.9699999999720603 1825238.1599999999161810, 850928.5065637384541333 1825239.9912122096866369, 851028.4189400272443891 1825264.2676291153766215, 851044.8499999999767169 1825268.2600000000093132, 851102.7827544375322759 1825329.8732715183869004, 851110.3300000000745058 1825337.9000000001396984, 851127.8151626735925674 1825350.6580181920435280, 851170.0300000000279397 1825381.4599999999627471, 851221.7600178631255403 1825431.0510890716686845, 851227.1590260977391154 1825436.2268595299683511, 851227.1999999999534339 1825431.1000000000931323, 851228.9000000001396984 1825230.8000000000465661, 851227.1901407483965158 1825436.2566876544151455, 851273.3000000000465661 1825480.4600000001955777, 851301.4500000000698492 1825466.6799999999348074, 851334.459999
 9999627471 1825469.9700000002048910, 851378.3399999999674037 1825489.3699999998789281, 851378.4700000000884756 1825474.3500000000931323, 851428.3800000001210719 1825491.8000000002793968, 851462.1800000000512227 1825520.1200000001117587, 851483.7199999999720603 1825576.3700000001117587, 851533.4000000000232831 1825620.8400000000838190, 851560.1300000000046566 1825655.1100000001024455, 851587.8100000001722947 1825696.3999999999068677, 851598.6156093492172658 1825734.5618786055129021, 851606.2800000000279397 1825761.6300000001210719, 851624.5735819654073566 1825793.3493836307898164, 851626.0100000000093132 1825795.8400000000838190, 851639.5299999999115244 1825853.0200000000186265, 851682.9200000000419095 1825930.4799999999813735, 851721.2454862464219332 1825935.8808557775337249, 851829.5620444538071752 1825936.8006267512682825, 851832.0500000001629815 1825935.7600000000093132, 851862.5999999999767169 1825874.9499999999534339, 851910.9899999999906868 1825836.3200000000651926, 851981.330
 0000000745058 1825805.8900000001303852, 852025.1445593443932012 1825784.8995315656065941, 852027.1999999999534339 1825538.0000000000000000, 852028.0999999998603016 1825437.9000000001396984, 852026.4000000000232831 1825638.1000000003259629, 852025.1534868489252403 1825784.8952546196524054, 852125.6700376782100648 1825736.7402687221765518, 852127.0899999999674037 1825736.0600000000558794, 852226.1585109630832449 1825685.9766200690064579, 852227.4000000000232831 1825539.6999999999534339, 852229.1995466686785221 1825339.5504205159377307, 852228.3000000000465661 1825439.6000000000931323, 852226.5999999999767169 1825639.9000000001396984, 852226.1858489551814273 1825685.9627995418850332, 852249.7699999999022111 1825674.0400000002700835, 852272.2851927585434169 1825640.2651164256967604, 852303.5200000000186265 1825593.4100000001490116, 852327.2517712992848828 1825575.7208152329549193, 852332.7399999998742715 1825571.6300000001210719, 852365.7916617594892159 1825540.9439370818436146, 852387.
 2300000000977889 1825521.0400000000372529, 852412.2600000001257285 1825521.2600000000093132, 852428.0489484647987410 1825497.8378233269322664, 852457.8900000000139698 1825453.5700000000651926, 852474.1630311026237905 1825441.7649393097963184, 852528.9411304481327534 1825402.0268731063697487, 852530.3000000000465661 1825242.0000000000000000, 852529.5000000001164153 1825342.1000000003259629, 852570.0132622728124261 1825342.4642551054712385, 852629.0500000001629815 1825224.7700000000186265, 852630.6628004902740940 1825217.8396128332242370, 852631.3000000000465661 1825142.8000000000465661, 852531.1999999999534339 1825141.8999999996740371, 852532.9000000001396984 1824941.6999999999534339, 852432.8000000000465661 1824940.8000000000465661, 852433.7000000000698492 1824840.7000000001862645, 852434.4999999998835847 1824740.6000000000931323, 852436.2000000000698492 1824540.4000000001396984, 852236.0000000000000000 1824538.6999999999534339, 852336.0999999999767169 1824539.5000000000000000, 8523
 37.8000000000465661 1824339.3000000000465661, 852337.0000000000000000 1824439.4000000001396984, 852637.3000000000465661 1824442.0000000000000000, 852640.7000000000698492 1824041.6000000000931323, 852540.5999999999767169 1824040.6999999999534339, 852538.0999999999767169 1824341.0000000000000000, 852438.0003961820621043 1824340.1504277260974050, 852438.8000000000465661 1824240.1000000000931323, 852439.7000000000698492 1824140.0000000000000000, 852440.5000000000000000 1824039.9000000001396984, 852340.4000000000232831 1824039.0000000000000000, 852140.2000000000698492 1824037.3000000000465661, 852040.0999999999767169 1824036.4000000001396984, 852041.0000000000000000 1823936.3000000000465661, 852041.8000000000465661 1823836.1999999999534339, 852141.9000000000232831 1823837.1000000000931323, 852142.8000000000465661 1823737.0000000000000000, 852042.7000000000698492 1823736.1000000000931323, 851942.5999999999767169 1823735.1999999999534339, 851842.5000000000000000 1823734.4000000001396984, 8
 51742.4000000000232831 1823733.5000000000000000, 851642.3000000000465661 1823732.6999999999534339), (851541.3000000000465661 1823831.9000000001396984, 851539.9999999993015081 1823982.0500000873580575, 851540.4000000000232831 1823932.0000000000000000, 851541.3000000000465661 1823831.9000000001396984), (851239.2000000000698492 1824029.6000000000931323, 851339.4000000000232831 1824030.4000000001396984, 851439.5000000000000000 1824031.3000000000465661, 851239.2000000000698492 1824029.6000000000931323), (850736.0999999999767169 1824325.6000000000931323, 850836.2000000000698492 1824326.4000000001396984, 850936.4000000000232831 1824327.3000000000465661, 850736.0999999999767169 1824325.6000000000931323), (850535.0999999999767169 1824424.0000000000000000, 850334.9000000000232831 1824422.3000000000465661, 850435.0000000000000000 1824423.1000000000931323, 850535.0999999999767169 1824424.0000000000000000), (851228.9000000001396984 1825230.8000000000465661, 851329.0999999998603016 1825231.699999
 9999534339, 851429.1999999999534339 1825232.6000000000931323, 851228.9000000001396984 1825230.8000000000465661), (851429.1999999999534339 1825232.6000000000931323, 851430.0000000000000000 1825132.5000000000000000, 851430.9000000001396984 1825032.3000000000465661, 851429.1999999999534339 1825232.6000000000931323), (852028.0999999998603016 1825437.9000000001396984, 852028.9000000001396984 1825337.8000000002793968, 852129.0000000000000000 1825338.7000000001862645, 852128.1500038170488551 1825438.7995504839345813, 852028.0999999998603016 1825437.9000000001396984), (852530.3000000000465661 1825242.0000000000000000, 852330.1499963951064274 1825240.3004245448391885, 852330.1499966070987284 1825240.3003995732869953, 852430.1999999999534339 1825241.1000000000931323, 852530.3000000000465661 1825242.0000000000000000), (852432.8000000000465661 1824940.8000000000465661, 852431.0999999998603016 1825140.9999999997671694, 852431.9000000001396984 1825040.9000000001396984, 852432.8000000000465661 182
 4940.8000000000465661), (851842.5000000000000000 1823734.4000000001396984, 851840.7000000000698492 1823934.6000000000931323, 851841.5999999999767169 1823834.5000000000000000, 851842.5000000000000000 1823734.4000000001396984), (851840.7000000000698492 1823934.6000000000931323, 851640.5000000000000000 1823932.9000000001396984, 851740.5999999999767169 1823933.6999999999534339, 851840.7000000000698492 1823934.6000000000931323), (851640.5000000000000000 1823932.9000000001396984, 851639.7000000000698492 1824033.0000000000000000, 851638.8000000000465661 1824133.1000000000931323, 851640.5000000000000000 1823932.9000000001396984), (851639.7000000000698492 1824033.0000000000000000, 851839.9000000000232831 1824034.6999999999534339, 851739.8000000000465661 1824033.9000000001396984, 851639.7000000000698492 1824033.0000000000000000), (851839.9000000000232831 1824034.6999999999534339, 851940.0000000000000000 1824035.6000000000931323, 851939.0999999999767169 1824135.6999999999534339, 851839.0000000
 000000000 1824134.8000000000465661, 851839.9000000000232831 1824034.6999999999534339), (851939.0999999999767169 1824135.6999999999534339, 851938.3000000000465661 1824235.8000000000465661, 852038.4000000000232831 1824236.6000000000931323, 852037.5000000000000000 1824336.6999999999534339, 851937.4000000000232831 1824335.9000000001396984, 851939.0999999999767169 1824135.6999999999534339), (851638.8000000000465661 1824133.1000000000931323, 851438.6000002340879291 1824131.4000000020023435, 851538.7000000000698492 1824132.1999999999534339, 851638.8000000000465661 1824133.1000000000931323), (851235.0000000000000000 1824530.1000000000931323, 851234.0999999998603016 1824630.1999999997206032, 851134.0000000000000000 1824629.2999999998137355, 851134.8000000000465661 1824529.1999999999534339, 851235.0000000000000000 1824530.1000000000931323), (851235.0000000000000000 1824530.1000000000931323, 851235.8000000000465661 1824430.0000000000000000, 851335.9000000000232831 1824430.8000000000465661, 851
 436.0000000000000000 1824431.6999999999534339, 851435.1999999999534339 1824531.8000000002793968, 851335.0999999999767169 1824531.0000000000000000, 851235.0000000000000000 1824530.1000000000931323), (851435.1999999999534339 1824531.8000000002793968, 851433.5000000001164153 1824732.0000000000000000, 851434.3000000000465661 1824631.9000000001396984, 851435.1999999999534339 1824531.8000000002793968), (851833.9000000001396984 1824735.5000000000000000, 851934.0000000000000000 1824736.3000000000465661, 852134.1999999999534339 1824738.0000000000000000, 852034.0999999998603016 1824737.1999999999534339, 851833.9000000001396984 1824735.5000000000000000), (852134.1999999999534339 1824738.0000000000000000, 852234.3000000000465661 1824738.9000000001396984, 852334.4000000000232831 1824739.6999999999534339, 852333.5999999999767169 1824839.9000000001396984, 852233.4000000000232831 1824839.0000000002328306, 852033.1999999999534339 1824837.2999999998137355, 852133.3000000000465661 1824838.100000000325
 9629, 852134.1999999999534339 1824738.0000000000000000), (851833.9000000001396984 1824735.5000000000000000, 851832.1999999999534339 1824935.6999999999534339, 851833.0000000000000000 1824835.6000000000931323, 851833.9000000001396984 1824735.5000000000000000), (851934.8000000000465661 1824636.1999999999534339, 851936.5999999999767169 1824436.0000000000000000, 851935.7000000000698492 1824536.1000000000931323, 851934.8000000000465661 1824636.1999999999534339), (851935.7000000000698492 1824536.1000000000931323, 852135.9000000000232831 1824537.8000000000465661, 852035.8000000000465661 1824537.0000000000000000, 851935.7000000000698492 1824536.1000000000931323), (850338.3000000000465661 1824021.8000000000465661, 850336.9947843523696065 1824172.6026079109869897, 850337.4000000000232831 1824121.9000000001396984, 850338.3000000000465661 1824021.8000000000465661), (852138.5000000000000000 1824237.5000000000000000, 852137.2000000000698492 1824387.6499999999068677, 852137.5999999999767169 1824337
 .6000000000931323, 852138.5000000000000000 1824237.5000000000000000), (851336.8000000000465661 1824330.6999999999534339, 851537.0000000000000000 1824332.5000000000000000, 851436.9000000000232831 1824331.6000000000931323, 851336.8000000000465661 1824330.6999999999534339), (850333.0999999998603016 1824622.5000000000000000, 850433.2000000000698492 1824623.3000000000465661, 850533.4000000000232831 1824624.1999999997206032, 850333.0999999998603016 1824622.5000000000000000), (851532.7000000000698492 1824832.9999999997671694, 851531.0000000000000000 1825033.1999999999534339, 851531.8000000000465661 1824933.1000000000931323, 851532.7000000000698492 1824832.9999999997671694), (852131.6495722740655765 1825038.4003961817361414, 852231.7000000000698492 1825039.1999999999534339, 852131.6495722740655765 1825038.4003961822018027, 852131.6495722740655765 1825038.4003961817361414), (852230.9000004681292921 1825139.3000000037718564, 852431.0999995357124135 1825140.9999999958090484, 852331.00000000000
 00000 1825140.1999999997206032, 852230.9000004681292921 1825139.3000000037718564)), ((844932.7761059190379456 1823944.7908861120231450, 844927.9000000000232831 1823966.4000000001396984, 844926.1971254986710846 1823975.4433307987637818, 844920.5600000000558794 1824005.3800000001210719, 844914.2800000000279397 1824037.3600000001024455, 844900.1199999999953434 1824053.2600000000093132, 844831.4899999999906868 1824117.7399999999906868, 844831.2088827658444643 1824118.2226566665340215, 844815.2399999999906868 1824145.6400000001303852, 844784.9799999999813735 1824171.4100000001490116, 844763.5500000000465661 1824218.2800000000279397, 844739.1900000000605360 1824257.1100000001024455, 844732.5689081742893904 1824274.1257943792734295, 844729.6396295028971508 1824281.6538584602531046, 844728.9000000000232831 1824374.1999999999534339, 844727.2000000000698492 1824574.4000000001396984, 844729.6370590717997402 1824281.6604643084574491, 844694.1500000000232831 1824372.8600000001024455, 844679.7099
 999999627471 1824422.7900000000372529, 844669.4100000000325963 1824456.7399999999906868, 844619.9799999999813735 1824499.3700000001117587, 844597.2096419272711501 1824573.2967368511017412, 844596.3000000000465661 1824576.2500000000000000, 844595.9899999999906868 1824612.2900000000372529, 844586.7700000000186265 1824637.2399999999906868, 844566.9099158239550889 1824673.1669223201461136, 844560.3300000000745058 1824685.0700000002980232, 844554.0500000001629815 1824717.0500000000465661, 844557.7900000000372529 1824747.1200000001117587, 844627.4500000000698492 1824796.7700000000186265, 844694.2099999999627471 1824834.3900000001303852, 844724.7609713199781254 1824854.5584635899867862, 844755.6946466653607786 1824874.9795722477138042, 844824.2763564363121986 1824920.2543264275882393, 844824.2983818182256073 1824920.2688666565809399, 844889.3300000000745058 1824963.1999999999534339, 844892.4905942827463150 1824976.3175977508071810, 844901.9000000001396984 1825015.3699999998789281, 844923.5
 665353111689910 1825015.8703710103873163, 844923.5730725777102634 1825015.8705219828989357, 845040.0300000000279397 1825018.5600000000558794, 845051.8699999999953434 1825039.6799999999348074, 845072.8800000000046566 1825040.8600000001024455, 845082.2800000000279397 1824995.8900000001303852, 845096.2800000000279397 1824997.0100000000093132, 845101.1099999999860302 1825018.0800000000745058, 845219.2299999999813735 1825020.0900000000838190, 845221.9000000000232831 1825059.1600000001490116, 845224.6310738313477486 1825079.2110685959924012, 845231.3199999999487773 1825128.3200000000651926, 845246.4599999999627471 1825113.4299999999348074, 845279.5800000000745058 1825103.6999999999534339, 845296.5299999999115244 1825112.8600000001024455, 845313.4000000000232831 1825130.0200000000186265, 845376.4200000000419095 1825136.5700000000651926, 845381.2399999999906868 1825274.7700000000186265, 845413.2899999999208376 1825273.0400000000372529, 845573.4099999999161810 1825281.4200000001583248, 84562
 0.9899999999906868 1825336.8900000003632158, 845687.8272242128150538 1825383.5150588175747544, 845721.4000000000232831 1825383.8000000002793968, 845687.8513357406482100 1825383.5318788068834692, 845693.6400000000139698 1825387.5700000000651926, 845721.2889667560812086 1825396.1617011527996510, 845766.5299999999115244 1825410.2199999999720603, 845836.8300000000745058 1825384.8000000000465661, 845903.4599999999627471 1825437.4299999999348074, 845949.9200000000419095 1825506.9000000001396984, 845983.5299999999115244 1825556.2500000000000000, 845995.4399999999441206 1825568.3600000001024455, 846045.4799999999813735 1825570.7900000000372529, 846123.5299999999115244 1825575.4699999999720603, 846195.7600000000093132 1825558.0700000000651926, 846215.9699999999720603 1825537.2199999999720603, 846211.1099999999860302 1825519.1500000001396984, 846496.8699999999953434 1825469.5399999998044223, 846518.0300000000279397 1825453.7099999999627471, 846542.3900000000139698 1825414.8700000001117587, 84
 6555.7199999999720603 1825377.9399999999441206, 846608.3399999999674037 1825313.3200000000651926, 846687.2899999999208376 1825212.8799999998882413, 846748.8300000000745058 1825157.3500000000931323, 846777.2199999999720603 1825115.5399999998044223, 846813.9500000000698492 1825035.7600000000093132, 846818.2099999999627471 1825005.7700000000186265, 846762.2300000000977889 1824995.2800000000279397, 846725.3199999999487773 1824979.9399999999441206, 846699.4700000000884756 1824958.7000000001862645, 846688.6600000000325963 1824935.5800000000745058, 846692.9703912005061284 1824891.5967367838602513, 846694.1500000000232831 1824879.5600000000558794, 846697.8000000000465661 1824803.5100000000093132, 846698.4490068613085896 1824791.5024640944320709, 846698.4490068611921743 1824791.5024640944320709, 846701.3699999999953434 1824737.4599999999627471, 846728.6324568932177499 1824667.7812779853120446, 846730.0999999999767169 1824491.5000000000000000, 846630.0666614775545895 1824490.6005993541330099,
  846630.8153520846972242 1824404.1268342211842537, 846604.2399999999906868 1824388.2299999999813735, 846546.7500000000000000 1824320.6600000001490116, 846531.5441637829644606 1824307.5050767704378814, 846529.0999999999767169 1824589.9000000001396984, 846529.9000000000232831 1824489.8000000000465661, 846530.8000000000465661 1824389.6000000000931323, 846531.5381628699833527 1824307.4998852408025414, 846526.8800000000046566 1824303.4699999999720603, 846531.6099206856451929 1824299.5188215249218047, 846531.7000000000698492 1824289.5000000000000000, 846531.6133103400934488 1824299.5159899489954114, 846543.4766106829047203 1824289.6058836125303060, 846567.2099999999627471 1824269.7800000000279397, 846612.4100000000325963 1824252.1500000001396984, 846632.2175146056106314 1824238.1584849809296429, 846669.8300000000745058 1824211.5900000000838190, 846684.0108215067302808 1824190.7108756965026259, 846698.2199999999720603 1824169.7900000000372529, 846732.9552037363173440 1824162.71567332604900
 00, 846778.4500000000698492 1824153.4499999999534339, 846832.7800000000279397 1824122.8800000001210719, 846832.7405478489818051 1824091.8918528039939702, 846832.7405478490982205 1824091.8918528039939702, 846832.6500000000232831 1824020.7700000000186265, 846834.8013788460521027 1823962.1964441391173750, 846835.2600000000093132 1823949.7099999999627471, 846834.9184087043395266 1823948.4144572964869440, 846826.5300000000279397 1823916.6000000000931323, 846808.8978883343515918 1823891.4617192756850272, 846808.8978883342351764 1823891.4617192756850272, 846738.2708267109701410 1823790.7680000271648169, 846636.0000000000000000 1823789.9000000001396984, 846736.2000000000698492 1823790.6999999999534339, 846736.2227924335747957 1823787.8480967523064464, 846722.6800000000512227 1823768.5400000000372529, 846720.9799999999813735 1823732.4799999999813735, 846698.7676939633674920 1823690.2944471046794206, 846678.6199999999953434 1823652.0300000000279397, 846652.7099999999627471 1823637.79000000003
 72529, 846637.3552883139345795 1823639.1112343843560666, 846557.5300000000279397 1823645.9799999999813735, 846453.8000000000465661 1823601.0400000000372529, 846465.8800000000046566 1823593.1400000001303852, 846492.3375450056046247 1823588.4149966377299279, 846492.3375450057210401 1823588.4149966377299279, 846530.0500000000465661 1823581.6799999999348074, 846537.7877689857268706 1823577.8179056709632277, 846538.5000000000000000 1823488.6999999999534339, 846539.4000000000232831 1823388.6000000000931323, 846439.3000000000465661 1823387.6999999999534339, 846440.0999999999767169 1823287.6000000000931323, 846441.0000000000000000 1823187.5000000000000000, 846340.9000000000232831 1823186.6000000000931323, 846340.0000000000000000 1823286.8000000000465661, 846342.5999999999767169 1822986.4000000001396984, 846242.5000000000000000 1822985.6000000000931323, 846239.9000000000232831 1823285.9000000001396984, 846139.8000000000465661 1823285.0000000000000000, 846138.9000000000232831 1823385.10000000
 00931323, 846239.0999959603650495 1823386.0004492898005992, 846237.3000000000465661 1823586.1999999999534339, 846337.4000000000232831 1823587.1000000000931323, 846336.5999999999767169 1823687.1999999999534339, 846436.7000000000698492 1823688.0000000000000000, 846435.8000000000465661 1823788.1000000000931323, 846535.9000000000232831 1823789.0000000000000000, 846535.0999999999767169 1823889.1000000000931323, 846534.2000000000698492 1823989.1999999999534339, 846334.0000000000000000 1823987.5000000000000000, 846233.9000000000232831 1823986.6000000000931323, 846232.2000000000698492 1824186.9000000001396984, 846332.2666689730249345 1824187.6997336181811988, 846331.4000000000232831 1824287.8000000000465661, 846231.3000000000465661 1824287.0000000000000000, 846230.5000000000000000 1824387.1000000000931323, 846228.8000000000465661 1824587.3000000000465661, 846128.5999999999767169 1824586.4000000001396984, 846129.5000000000000000 1824486.3000000000465661, 846130.4000000000232831 1824386.19999
 99999534339, 846030.3000000000465661 1824385.4000000001396984, 845930.2000000000698492 1824384.5000000000000000, 845929.3000000000465661 1824484.6000000000931323, 845829.2000000000698492 1824483.6999999999534339, 845830.9000000000232831 1824283.5000000000000000, 845831.8000000000465661 1824183.4000000001396984, 845731.7000000000698492 1824182.6000000000931323, 845730.8000000000465661 1824282.6999999999534339, 845729.9000000000232831 1824382.8000000000465661, 845629.8000000000465661 1824381.9000000001396984, 845630.7000000000698492 1824281.8000000000465661, 845530.5999999999767169 1824281.0000000000000000, 845531.4000000000232831 1824180.8000000000465661, 845431.3000000000465661 1824180.0000000000000000, 845432.2000000000698492 1824079.9000000001396984, 845332.0999999999767169 1824079.0000000000000000, 845232.0000000000000000 1824078.1999999999534339, 845233.7000000000698492 1823878.0000000000000000, 845133.5999999999767169 1823877.1000000000931323, 845134.4000000000232831 1823777.00
 00000000000000, 845137.0000000000000000 1823476.6999999999534339, 844836.7002122720004991 1823474.0750018553808331, 844838.4000000000232831 1823273.9000000001396984, 844638.2000000000698492 1823272.1999999999534339, 844637.3000000000465661 1823372.3000000000465661, 844639.0999999999767169 1823172.1000000000931323, 844438.8000000000465661 1823170.3000000000465661, 844438.0000000000000000 1823270.4000000001396984, 844437.0999999999767169 1823370.6000000000931323, 844436.3005327637074515 1823470.6333379461430013, 844236.0999999999767169 1823468.9000000001396984, 844233.5000000000000000 1823769.3000000000465661, 844234.3000000000465661 1823669.1999999999534339, 844134.2000000000698492 1823668.3000000000465661, 844135.0999999999767169 1823568.1999999999534339, 844135.9000000000232831 1823468.1000000000931323, 844035.8000000000465661 1823467.1999999999534339, 844035.0000000000000000 1823567.3000000000465661, 843934.9000000000232831 1823566.5000000000000000, 843934.0000000000000000 1823666
 .6000000000931323, 844034.0999999999767169 1823667.4000000001396984, 844033.3000000000465661 1823767.6000000000931323, 844133.3500033930176869 1823768.3996004268992692, 844132.5000000000000000 1823868.5000000000000000, 844032.4000000000232831 1823867.6999999999534339, 843932.3000000000465661 1823866.8000000000465661, 843931.4640845044050366 1823959.7723790116142482, 843983.0800000000745058 1823934.2700000000186265, 844023.3499999999767169 1823907.5900000000838190, 844032.1073635076172650 1823904.3161411110777408, 844096.6700000000419095 1823880.1799999999348074, 844132.3660955451196060 1823885.2547949166037142, 844156.6700000000419095 1823888.7099999999627471, 844244.6600000000325963 1823901.4699999999720603, 844332.3722259016940370 1823911.2127340587321669, 844371.6900000000605360 1823915.5800000000745058, 844466.6600000000325963 1823931.4100000001490116, 844482.7800000000279397 1823919.5300000000279397, 844583.9899999999906868 1823909.3900000001303852, 844611.1500000000232831 1823
 893.6000000000931323, 844632.9883521241135895 1823880.0599439740180969, 844633.9000000000232831 1823772.6999999999534339, 844633.0999999999767169 1823872.8000000000465661, 844633.0349857393885031 1823880.0310305394232273, 844644.5319209550507367 1823872.9027845042292029, 844733.6479543613968417 1823817.6497105411253870, 844736.9699999999720603 1823815.5900000000838190, 844788.0000000000000000 1823819.0300000000279397, 844829.1300000000046566 1823809.3700000001117587, 844833.8326968360925093 1823807.8463083780370653, 844850.2099999999627471 1823802.5400000000372529, 844923.1300000000046566 1823822.1899999999441206, 844923.0300000000279397 1823833.1999999999534339, 844933.7011916440678760 1823834.0420193299651146, 844933.7011916440678760 1823834.0420193301979452, 844980.0600000000558794 1823837.6999999999534339, 844996.9799999999813735 1823849.8600000001024455, 845016.9100000000325963 1823860.0400000000372529, 844941.4300000000512227 1823906.4399999999441206, 844932.7761059190379456 1
 823944.7908861120231450), (846531.7000000000698492 1824289.5000000000000000, 846431.5666620586998761 1824288.7005322319455445, 846432.4333310270449147 1824188.6002663818653673, 846532.5000000000000000 1824189.4000000001396984, 846531.7000000000698492 1824289.5000000000000000), (845530.5999999999767169 1824281.0000000000000000, 845528.0000000000000000 1824581.3000000000465661, 845529.7000000000698492 1824381.1000000000931323, 845530.5999999999767169 1824281.0000000000000000), (845030.0000000000000000 1824276.6999999999534339, 845029.2000000000698492 1824376.8000000000465661, 845028.3000000000465661 1824476.9000000001396984, 845030.0000000000000000 1824276.6999999999534339), (845028.3000000000465661 1824476.9000000001396984, 844828.1399970820639282 1824475.2003396356012672, 844828.1399972536601126 1824475.2003196582663804, 844928.2000000000698492 1824476.0000000000000000, 845028.3000000000465661 1824476.9000000001396984), (845424.4999999998835847 1824980.8000000000465661, 845724.80000
 00000465661 1824983.4000000001396984, 845624.7000000000698492 1824982.6000000000931323, 845524.5999999999767169 1824981.6999999999534339, 845424.4999999998835847 1824980.8000000000465661), (845424.4999999998835847 1824980.8000000000465661, 845425.3000000000465661 1824880.7000000001862645, 845426.2000000000698492 1824780.6000000000931323, 845424.4999999998835847 1824980.8000000000465661), (845425.3000000000465661 1824880.7000000001862645, 845325.1999999999534339 1824879.9000000001396984, 845225.0999999998603016 1824879.0000000002328306, 845425.3000000000465661 1824880.7000000001862645), (845924.9994006460765377 1824985.1666614776477218, 845924.9994342236313969 1824985.1666617682203650, 845923.3000000000465661 1825185.4000000001396984, 845924.0999999998603016 1825085.1999999999534339, 845924.9994006460765377 1824985.1666614776477218), (845923.3000000000465661 1825185.4000000001396984, 846023.4000000000232831 1825186.1999999997206032, 846123.4999999979045242 1825187.1000000000931323, 8
 45923.3000000000465661 1825185.4000000001396984), (846023.4000000000232831 1825186.1999999997206032, 846025.0997169703477994 1824986.0333308828994632, 846025.0997336179716513 1824986.0333310270216316, 846024.3000000000465661 1825086.1000000003259629, 846023.4000000000232831 1825186.1999999997206032), (846024.3000000000465661 1825086.1000000003259629, 846224.4999999998835847 1825087.8000000002793968, 846124.4000000000232831 1825087.0000000002328306, 846024.3000000000465661 1825086.1000000003259629), (845824.0000000000000000 1825084.3999999999068677, 845823.1999999999534339 1825184.5000000000000000, 845822.3000000000465661 1825284.6000000000931323, 845824.0000000000000000 1825084.3999999999068677), (846223.5999999999767169 1825187.9000000001396984, 846323.7000000000698492 1825188.8000000000465661, 846322.0000000000000000 1825388.9999999997671694, 846221.9000000001396984 1825388.1000000003259629, 846222.7000000000698492 1825288.0000000000000000, 846223.5999999999767169 1825187.90000000
 01396984)), ((844640.8000000000465661 1822971.8000000000465661, 844639.9000000000232831 1823072.0000000000000000, 844539.8000000000465661 1823071.1000000000931323, 844539.0000000000000000 1823171.1999999999534339, 844639.0999999999767169 1823172.1000000000931323, 844638.2000000000698492 1823272.1999999999534339, 844738.3000000000465661 1823273.0000000000000000, 844838.4000000000232831 1823273.9000000001396984, 844839.3000000000465661 1823173.8000000000465661, 844841.0000000000000000 1822973.6000000000931323, 844740.9000000000232831 1822972.6999999999534339, 844640.8000000000465661 1822971.8000000000465661), (844740.9000000000232831 1822972.6999999999534339, 844739.2000000000698492 1823172.9000000001396984, 844740.0000000000000000 1823072.8000000000465661, 844740.9000000000232831 1822972.6999999999534339)), ((852149.7000000000698492 1822936.1000000000931323, 852148.8000000000465661 1823036.1999999999534339, 852048.7000000000698492 1823035.4000000001396984, 851948.5999999999767169 182
 3034.5000000000000000, 851947.7000000000698492 1823134.6000000000931323, 851847.5999999999767169 1823133.6999999999534339, 851848.5000000000000000 1823033.6000000000931323, 851748.4000000000232831 1823032.8000000000465661, 851747.5000000000000000 1823132.9000000001396984, 851647.4000000000232831 1823132.0000000000000000, 851645.7000000000698492 1823332.1999999999534339, 851644.8000000000465661 1823432.4000000001396984, 851644.0000000000000000 1823532.5000000000000000, 851744.0999999999767169 1823533.3000000000465661, 851742.4000000000232831 1823733.5000000000000000, 851942.5999999999767169 1823735.1999999999534339, 852142.8000000000465661 1823737.0000000000000000, 852242.9000000000232831 1823737.8000000000465661, 852242.0000000000000000 1823837.9000000001396984, 852342.0999999999767169 1823838.8000000000465661, 852343.0000000000000000 1823738.6999999999534339, 852343.9000000000232831 1823638.6000000000931323, 852243.8000000000465661 1823637.6999999999534339, 852244.5999999999767169 
 1823537.6000000000931323, 852344.7000000000698492 1823538.5000000000000000, 852345.5999999999767169 1823438.4000000001396984, 852346.4000000000232831 1823338.3000000000465661, 852446.5000000000000000 1823339.1000000000931323, 852447.4000000000232831 1823239.0000000000000000, 852347.3000000000465661 1823238.1000000000931323, 852348.2000000000698492 1823138.0000000000000000, 852448.3000000000465661 1823138.9000000001396984, 852449.0999999999767169 1823038.8000000000465661, 852349.0000000000000000 1823037.9000000001396984, 852349.9000000000232831 1822937.8000000000465661, 852249.8000000000465661 1822937.0000000000000000, 852149.7000000000698492 1822936.1000000000931323), (851747.5000000000000000 1823132.9000000001396984, 851746.7000000000698492 1823233.0000000000000000, 851745.8000000000465661 1823333.1000000000931323, 851747.5000000000000000 1823132.9000000001396984), (851844.2000000000698492 1823534.1999999999534339, 851845.0000000000000000 1823434.1000000000931323, 851845.9000000000
 232831 1823334.0000000000000000, 851844.2000000000698492 1823534.1999999999534339), (851944.3000000009778887 1823534.9999998814892024, 851944.3000000000465661 1823535.0000000000000000, 851944.2999999989988282 1823535.0000001164153218, 851944.3000000009778887 1823534.9999998814892024), (852045.3000000000465661 1823435.8000000000465661, 852145.4000000000232831 1823436.6000000000931323, 852245.5000000000000000 1823437.5000000000000000, 852045.3000000000465661 1823435.8000000000465661), (852246.3000000000465661 1823337.4000000001396984, 852248.0000000000000000 1823137.1999999999534339, 852247.2000000000698492 1823237.3000000000465661, 852246.3000000000465661 1823337.4000000001396984), (851943.4499961829278618 1823635.1004495162051171, 852043.5000000000000000 1823636.0000000000000000, 852143.5999999999767169 1823636.9000000001396984, 851943.4499961829278618 1823635.1004495162051171)), ((843138.3000000000465661 1823059.1000000000931323, 843139.2000000000698492 1822959.0000000000000000, 84
 2939.0000000000000000 1822957.3000000000465661, 842738.7000000000698492 1822955.5000000000000000, 842737.8495794840855524 1823055.6995466686785221, 842637.8000000000465661 1823054.8000000000465661, 842537.7000000000698492 1823053.9000000001396984, 842437.5999999999767169 1823053.1000000000931323, 842329.6540499393595383 1823052.1657141472678632, 842379.2800000000279397 1823107.6000000000931323, 842436.4454971232917160 1823181.5063755111768842, 842452.5600000000558794 1823202.3400000000838190, 842472.4599999999627471 1823216.5200000000186265, 842472.1419695207150653 1823253.5901554452721030, 842471.7299999999813735 1823301.6100000001024455, 842485.1900000000605360 1823366.8000000000465661, 842509.9599999999627471 1823397.0500000000465661, 842558.7000000000698492 1823433.5100000000093132, 842678.2800000000279397 1823498.6100000001024455, 842697.1900000000605360 1823511.7800000000279397, 842714.1700000000419095 1823516.9299999999348074, 842747.2600000000093132 1823511.2099999999627471,
  842881.0400000000372529 1823438.2700000000186265, 842931.3599999999860302 1823407.6699999999254942, 842972.6400000000139698 1823497.1200000001117587, 842995.7199999999720603 1823490.3100000000558794, 843046.9899999999906868 1823465.7199999999720603, 843133.3900000000139698 1823431.4199999999254942, 843135.0583509306889027 1823434.9636139289941639, 843158.9500000000698492 1823485.7099999999627471, 843179.6800000000512227 1823520.9199999999254942, 843195.3900000000139698 1823557.1000000000931323, 843197.7027817158959806 1823560.1727522832807153, 843233.7201772944536060 1823608.0253160321153700, 843253.7900000000372529 1823634.6899999999441206, 843290.0382458720123395 1823661.0534525145776570, 843344.3300000000745058 1823700.5400000000372529, 843432.4742545809131116 1823777.2083722923416644, 843434.3000000000465661 1823562.1999999999534339, 843534.5000000000000000 1823563.0000000000000000, 843535.3000000000465661 1823462.9000000001396984, 843536.2000000000698492 1823362.80000000004656
 61, 843436.0999999999767169 1823362.0000000000000000, 843336.0000000000000000 1823361.1000000000931323, 843335.0999999999767169 1823461.1999999999534339, 843334.2000000000698492 1823561.3000000000465661, 843234.0999999999767169 1823560.5000000000000000, 843235.8000000000465661 1823360.3000000000465661, 843237.5999999999767169 1823160.0000000000000000, 843137.5000000000000000 1823159.1999999999534339, 843138.3000000000465661 1823059.1000000000931323), (843137.5000000000000000 1823159.1999999999534339, 843135.7000000000698492 1823359.4000000001396984, 843136.5999999999767169 1823259.3000000000465661, 843137.5000000000000000 1823159.1999999999534339), (842787.0500000007450581 1823156.2000000001862645, 842837.0999999999767169 1823156.6000000000931323, 842937.2000000000698492 1823157.5000000000000000, 842787.0500000007450581 1823156.2000000001862645), (842635.2000000000698492 1823355.1000000000931323, 842835.4000000000232831 1823356.8000000000465661, 842735.3000000000465661 1823356.00000
 00000000000, 842635.2000000000698492 1823355.1000000000931323)), ((848944.5000000000000000 1823108.9000000001396984, 848942.8000000000465661 1823309.1000000000931323, 848941.0999999999767169 1823509.3000000000465661, 848940.2000000000698492 1823609.4000000001396984, 848939.4000000000232831 1823709.5000000000000000, 849039.5000000000000000 1823710.4000000001396984, 848839.3000000000465661 1823708.6000000000931323, 848739.2000000000698492 1823707.8000000000465661, 848438.8000000000465661 1823705.1999999999534339, 848439.7000000000698492 1823605.1000000000931323, 848339.5999999999767169 1823604.1999999999534339, 848239.5000000000000000 1823603.4000000001396984, 848238.6004495160887018 1823703.4500038172118366, 848138.5000000000000000 1823702.6000000000931323, 848038.4000000000232831 1823701.8000000000465661, 848037.5000000000000000 1823801.9000000001396984, 848137.6500033895717934 1823802.6996008253190666, 848136.8000000000465661 1823902.8000000000465661, 848236.9000000000232831 182390
 3.6999999999534339, 848237.8000000000465661 1823803.6000000000931323, 848437.9998201937414706 1823805.3199984552338719, 848437.0999999999767169 1823905.4000000001396984, 848537.2000000000698492 1823906.3000000000465661, 848637.3000000000465661 1823907.1000000000931323, 848638.1996403874363750 1823807.0399969106074423, 848738.3000000000465661 1823807.9000000001396984, 848737.4000000000232831 1823908.0000000000000000, 848736.8307372784474865 1823979.2289980300702155, 848757.1700000000419095 1823987.2099999999627471, 848796.1300000000046566 1823997.5500000000465661, 848798.2457518703304231 1824008.6234654255677015, 848936.8000000000465661 1824009.8000000000465661, 849036.9000000000232831 1824010.6999999999534339, 849036.0000000000000000 1824110.8000000000465661, 849136.0999999999767169 1824111.6000000000931323, 849135.3000000000465661 1824211.6999999999534339, 849227.4070192123763263 1824212.5281350379809737, 849235.4582774870796129 1824206.1182483835145831, 849236.3000000000465661 182
 4112.5000000000000000, 849237.0999999999767169 1824012.4000000001396984, 849337.2000000000698492 1824013.1999999999534339, 849338.0999999999767169 1823913.1000000000931323, 849338.9000000000232831 1823813.0000000000000000, 849238.8000000000465661 1823812.1999999999534339, 849239.7000000000698492 1823712.1000000000931323, 849240.5000000000000000 1823612.0000000000000000, 849241.4000000000232831 1823511.9000000001396984, 849242.3000000000465661 1823411.6999999999534339, 849243.0999999999767169 1823311.6000000000931323, 849143.0499966071220115 1823310.8003995732869953, 849143.9000000000232831 1823210.6999999999534339, 849043.8000000000465661 1823209.8000000000465661, 849044.5999999999767169 1823109.6999999999534339, 848944.5000000000000000 1823108.9000000001396984), (849039.5000000000000000 1823710.4000000001396984, 849040.3000000000465661 1823610.1999999999534339, 849140.4000000000232831 1823611.1000000000931323, 849139.5999999999767169 1823711.1999999999534339, 849039.500000000000000
 0 1823710.4000000001396984), (848737.4000000000232831 1823908.0000000000000000, 848837.5000000000000000 1823908.8000000000465661, 848937.5999999999767169 1823909.6999999999534339, 848737.4000000000232831 1823908.0000000000000000), (849137.0000000000000000 1824011.5000000000000000, 849138.7000000000698492 1823811.3000000000465661, 849137.9000000000232831 1823911.4000000001396984, 849137.0000000000000000 1824011.5000000000000000), (848488.0500002900371328 1823805.7500000025611371, 848571.4666664082324132 1823806.4666666644625366, 848538.0999999999767169 1823806.1999999999534339, 848488.0500002900371328 1823805.7500000025611371), (849038.5999999999767169 1823810.5000000000000000, 848938.5000000000000000 1823809.6000000000931323, 848838.4000000000232831 1823808.6999999999534339, 849038.5999999999767169 1823810.5000000000000000)), ((848367.0000000000000000 1820400.8000000000465661, 848366.2000000000698492 1820500.9000000001396984, 848566.4000000000232831 1820502.6000000000931323, 848567.
 3000000000465661 1820402.5000000000000000, 848367.0000000000000000 1820400.8000000000465661)), ((842338.3000000000465661 1822952.1000000000931323, 842337.5000000000000000 1823052.1999999999534339, 842437.5999999999767169 1823053.1000000000931323, 842438.4000000000232831 1822953.0000000000000000, 842338.3000000000465661 1822952.1000000000931323)), ((843239.3000000000465661 1822959.8000000000465661, 843238.4000000000232831 1823059.9000000001396984, 843338.5000000000000000 1823060.8000000000465661, 843339.4000000000232831 1822960.6999999999534339, 843239.3000000000465661 1822959.8000000000465661)), ((845041.2000000000698492 1822975.3000000000465661, 845040.3000000000465661 1823075.4000000001396984, 845140.5000000000000000 1823076.1999999999534339, 845141.3000000000465661 1822976.1000000000931323, 845041.2000000000698492 1822975.3000000000465661)), ((848645.0999999999767169 1823006.1999999999534339, 848644.2000000000698492 1823106.3000000000465661, 848744.3000000000465661 1823107.100000
 0000931323, 848743.4000000000232831 1823207.1999999999534339, 848843.5999999999767169 1823208.1000000000931323, 848845.3000000000465661 1823007.9000000001396984, 848745.2000000000698492 1823007.0000000000000000, 848645.0999999999767169 1823006.1999999999534339)), ((849045.5000000000000000 1823009.6000000000931323, 849044.5999999999767169 1823109.6999999999534339, 849144.7000000000698492 1823110.6000000000931323, 849143.9000000000232831 1823210.6999999999534339, 849244.0000000000000000 1823211.5000000000000000, 849244.8000000000465661 1823111.4000000001396984, 849245.7000000000698492 1823011.3000000000465661, 849145.5999999999767169 1823010.5000000000000000, 849045.5000000000000000 1823009.6000000000931323)), ((845241.4000000000232831 1822977.0000000000000000, 845240.5999999999767169 1823077.1000000000931323, 845540.9000000000232831 1823079.6999999999534339, 845541.7000000000698492 1822979.6000000000931323, 845241.4000000000232831 1822977.0000000000000000)), ((840536.4000000000232831
  1822936.6999999999534339, 840535.5000000000000000 1823036.8000000000465661, 840135.0999999999767169 1823033.3000000000465661, 840133.4000000000232831 1823233.6000000000931323, 840433.7000000000698492 1823236.1000000000931323, 840434.5999999999767169 1823136.0000000000000000, 840634.8000000000465661 1823137.6999999999534339, 840636.5000000000000000 1822937.5000000000000000, 840536.4000000000232831 1822936.6999999999534339)), ((843237.5999999999767169 1823160.0000000000000000, 843236.7000000000698492 1823260.1999999999534339, 843336.8000000000465661 1823261.0000000000000000, 843337.7000000000698492 1823160.9000000001396984, 843237.5999999999767169 1823160.0000000000000000)), ((840130.0000000000000000 1823634.0000000000000000, 840129.0999999999767169 1823734.1000000000931323, 840128.2000000000698492 1823834.1999999999534339, 840127.4000000000232831 1823934.3000000000465661, 840227.5000000000000000 1823935.1999999999534339, 840327.5999999999767169 1823936.0000000000000000, 840329.30000
 00000465661 1823735.8000000000465661, 840229.2004490676335990 1823734.9500038132537156, 840230.0999999999767169 1823634.8000000000465661, 840130.0000000000000000 1823634.0000000000000000)), ((847869.2781056958483532 1823700.3483764692209661, 847875.5000000000000000 1823712.3500000000931323, 847885.5300000000279397 1823709.4299999999348074, 847894.9714689536485821 1823700.5537180337123573, 847869.2781056958483532 1823700.3483764692209661)), ((846738.2359706806018949 1823790.7183054306078702, 846736.2241999210091308 1823787.8501034213695675, 846736.2000000000698492 1823790.6999999999534339, 846738.2359706806018949 1823790.7183054306078702)), ((845534.0000000000000000 1823880.5000000000000000, 845634.0999999999767169 1823881.4000000001396984, 845635.0000000000000000 1823781.3000000000465661, 845534.9000000000232831 1823780.4000000001396984, 845534.0000000000000000 1823880.5000000000000000)), ((849439.0000000000000000 1823813.9000000001396984, 849438.2000000000698492 1823914.00000000000
 00000, 849437.3000000000465661 1824014.1000000000931323, 849537.4000000000232831 1824015.0000000000000000, 849538.3000000000465661 1823914.9000000001396984, 849539.0999999999767169 1823814.8000000000465661, 849439.0000000000000000 1823813.9000000001396984)), ((852141.9000000000232831 1823837.1000000000931323, 852141.0999999999767169 1823937.1999999999534339, 852140.2000000000698492 1824037.3000000000465661, 852240.3000000000465661 1824038.1000000000931323, 852241.2000000000698492 1823938.0000000000000000, 852242.0000000000000000 1823837.9000000001396984, 852141.9000000000232831 1823837.1000000000931323)), ((840627.9000000000232831 1823938.6000000000931323, 840628.8000000000465661 1823838.5000000000000000, 840528.7000000000698492 1823837.6000000000931323, 840527.8000000000465661 1823937.6999999999534339, 840427.7000000000698492 1823936.9000000001396984, 840426.0000000000000000 1824137.1000000000931323, 840325.9000000000232831 1824136.1999999999534339, 840325.0000000000000000 1824236.
 3000000000465661, 840525.2000000000698492 1824238.1000000000931323, 840526.0999999999767169 1824138.0000000000000000, 840626.2000000000698492 1824138.8000000000465661, 840627.0999999999767169 1824038.6999999999534339, 840627.9000000000232831 1823938.6000000000931323)), ((845433.9000000000232831 1823879.6999999999534339, 845433.0000000000000000 1823979.8000000000465661, 845533.2000000000698492 1823980.6000000000931323, 845534.0000000000000000 1823880.5000000000000000, 845433.9000000000232831 1823879.6999999999534339)), ((852442.2000000000698492 1823839.6000000000931323, 852441.4000000000232831 1823939.8000000000465661, 852341.3000000000465661 1823938.9000000001396984, 852340.4000000000232831 1824039.0000000000000000, 852540.5999999999767169 1824040.6999999999534339, 852542.4000000000232831 1823840.5000000000000000, 852442.2000000000698492 1823839.6000000000931323)), ((847644.0000000000000000 1822997.6000000000931323, 847643.0999999999767169 1823097.6999999999534339, 847743.2000000000
 698492 1823098.6000000000931323, 847742.4000000000232831 1823198.6999999999534339, 847642.3000000000465661 1823197.8000000000465661, 847641.4000000000232831 1823297.9000000001396984, 847541.3000000000465661 1823297.1000000000931323, 847543.0000000000000000 1823096.8000000000465661, 847442.9000000000232831 1823096.0000000000000000, 847443.8000000000465661 1822995.9000000001396984, 847243.5999999999767169 1822994.1999999999534339, 847242.7000000000698492 1823094.3000000000465661, 847342.8000000000465661 1823095.1000000000931323, 847341.9000000000232831 1823195.1999999999534339, 847141.7000000000698492 1823193.5000000000000000, 847140.8500036050099880 1823293.5995754553005099, 846940.7000000000698492 1823291.9000000001396984, 846939.8000000000465661 1823392.0000000000000000, 846970.2753116589738056 1823392.2587813676800579, 846981.2199999999720603 1823389.3200000000651926, 847004.9253986178664491 1823392.5530128753744066, 847140.0000000000000000 1823393.6999999999534339, 847139.4488143
 305061385 1823462.6671069087460637, 847145.7199999999720603 1823470.8200000000651926, 847161.3523601859342307 1823493.9881069546099752, 847339.3672460824018344 1823495.4997218698263168, 847339.3672459408408031 1823495.4997382292058319, 847239.3000000000465661 1823494.6999999999534339, 847238.9143226962769404 1823537.5958867857698351, 847253.3200000000651926 1823531.8100000000558794, 847271.3599999999860302 1823528.9599999999627471, 847292.3499999999767169 1823533.1500000001396984, 847302.5400000000372529 1823512.2099999999627471, 847310.6600000000325963 1823500.2700000000186265, 847332.6400000000139698 1823504.4599999999627471, 847339.2866948893060908 1823504.8064827919006348, 847355.6600000000325963 1823505.6600000001490116, 847435.1600000000325963 1823458.2800000000279397, 847451.1400000000139698 1823462.4299999999348074, 847463.9699999999720603 1823484.5600000000558794, 847449.5800000000745058 1823528.4899999999906868, 847435.2600000000093132 1823563.4100000001490116, 847426.0999
 999999767169 1823580.3500000000931323, 847434.9300000000512227 1823602.4499999999534339, 847438.5469397746492177 1823602.7486218325793743, 847438.5999999999767169 1823596.5000000000000000, 847939.2000000000698492 1823600.8000000000465661, 848039.3000000000465661 1823601.6999999999534339, 848139.4000000000232831 1823602.5000000000000000, 848140.1996004268294200 1823502.4499966071452945, 848240.3000000000465661 1823503.3000000000465661, 848241.2000000000698492 1823403.1999999999534339, 848341.3000000000465661 1823404.0000000000000000, 848342.2000000000698492 1823303.9000000001396984, 848242.0999999999767169 1823303.1000000000931323, 848242.9000000000232831 1823203.0000000000000000, 848142.8000000000465661 1823202.1000000000931323, 848143.7000000000698492 1823102.0000000000000000, 848043.5999999999767169 1823101.1000000000931323, 847943.4004533312981948 1823100.2495794841088355, 847944.3000000000465661 1823000.1999999999534339, 847844.2000000000698492 1822999.3000000000465661, 847744.0
 999999999767169 1822998.4000000001396984, 847644.0000000000000000 1822997.6000000000931323), (847840.8000000000465661 1823399.6999999999534339, 848041.0000000000000000 1823401.4000000001396984, 847940.9000000000232831 1823400.6000000000931323, 847740.7000000000698492 1823398.9000000001396984, 847840.8000000000465661 1823399.6999999999534339), (847340.2000000000698492 1823395.4000000001396984, 847341.0999999999767169 1823295.3000000000465661, 847339.7947843535803258 1823446.1026077666319907, 847340.2000000000698492 1823395.4000000001396984)), ((840534.7000000000698492 1823136.9000000001396984, 840533.8000000000465661 1823237.0000000000000000, 840533.0000000000000000 1823337.1000000000931323, 840633.0999999999767169 1823338.0000000000000000, 840633.9000000000232831 1823237.9000000001396984, 840634.8000000000465661 1823137.6999999999534339, 840534.7000000000698492 1823136.9000000001396984)), ((848343.0000000000000000 1823203.8000000000465661, 848342.2000000000698492 1823303.90000000013
 96984, 848442.3000000000465661 1823304.8000000000465661, 848441.4000000000232831 1823404.9000000001396984, 848440.5000000000000000 1823505.0000000000000000, 848439.7000000000698492 1823605.1000000000931323, 848539.8000000000465661 1823606.0000000000000000, 848639.9000000000232831 1823606.8000000000465661, 848740.0000000000000000 1823607.6999999999534339, 848940.2000000000698492 1823609.4000000001396984, 848941.9000000000232831 1823409.1999999999534339, 848942.8000000000465661 1823309.1000000000931323, 848842.7000000000698492 1823308.1999999999534339, 848742.5999999999767169 1823307.3000000000465661, 848741.7000000000698492 1823407.5000000000000000, 848641.5999999999767169 1823406.6000000000931323, 848642.5000000000000000 1823306.5000000000000000, 848542.4000000000232831 1823305.6000000000931323, 848543.2000000000698492 1823205.5000000000000000, 848443.0999999999767169 1823204.6999999999534339, 848343.0000000000000000 1823203.8000000000465661)), ((845238.8000000000465661 1823277.3000
 000000465661, 845237.0999999999767169 1823477.5000000000000000, 845337.2000000000698492 1823478.4000000001396984, 845336.4000000000232831 1823578.5000000000000000, 845236.3000000000465661 1823577.6000000000931323, 845235.4000000000232831 1823677.6999999999534339, 845135.3000000000465661 1823676.9000000001396984, 845134.4000000000232831 1823777.0000000000000000, 845234.5999999999767169 1823777.8000000000465661, 845334.7000000000698492 1823778.6999999999534339, 845335.5000000000000000 1823678.6000000000931323, 845635.8000000000465661 1823681.1999999999534339, 845635.0000000000000000 1823781.3000000000465661, 845735.0999999999767169 1823782.1000000000931323, 845737.7000000000698492 1823481.8000000000465661, 845537.4000000000232831 1823480.1000000000931323, 845539.2000000000698492 1823279.9000000001396984, 845338.9000000000232831 1823278.1999999999534339, 845238.8000000000465661 1823277.3000000000465661)), ((847005.1010217635193840 1823392.5769648831337690, 847028.2199999999720603 18233
 95.7299999999813735, 847088.0200000000186265 1823427.2800000000279397, 847127.8900000000139698 1823447.6400000001303852, 847139.4147413723403588 1823462.6228101521264762, 847140.0000000000000000 1823393.6999999999534339, 847005.1010217635193840 1823392.5769648831337690)), ((846839.2453886438161135 1823441.7628852878697217, 846860.8100000000558794 1823421.3200000000651926, 846883.9100000000325963 1823412.5100000000093132, 846908.9699999999720603 1823408.7199999999720603, 846970.1732329026563093 1823392.2861907500773668, 846839.7000000000698492 1823391.1999999999534339, 846739.5999999999767169 1823390.3000000000465661, 846738.9457818951923400 1823463.0635914430022240, 846748.3300000000745058 1823461.4100000001490116, 846784.3000000000465661 1823470.7299999999813735, 846832.5500000000465661 1823448.1100000001024455, 846839.2453886438161135 1823441.7628852878697217)), ((846537.7932778957765549 1823577.8151560502592474, 846632.6099999999860302 1823530.4899999999906868, 846638.30119961895
 97994 1823526.8873976771719754, 846663.8100000000558794 1823510.7399999999906868, 846680.9333718657726422 1823489.8806197270750999, 846638.6499961829977110 1823489.5004495161119848, 846639.5000000000000000 1823389.4000000001396984, 846539.4000000000232831 1823388.6000000000931323, 846537.7932778957765549 1823577.8151560502592474)), ((852345.5999999999767169 1823438.4000000001396984, 852343.9000000000232831 1823638.6000000000931323, 852342.0999999999767169 1823838.8000000000465661, 852442.2000000000698492 1823839.6000000000931323, 852444.0000000000000000 1823639.4000000001396984, 852445.7000000000698492 1823439.1999999999534339, 852345.5999999999767169 1823438.4000000001396984)), ((840331.0000000000000000 1823535.6000000000931323, 840330.2000000000698492 1823635.6999999999534339, 840430.2500038170255721 1823636.5995504839811474, 840429.4000000000232831 1823736.6999999999534339, 840329.3000000000465661 1823735.8000000000465661, 840328.5000000000000000 1823835.9000000001396984, 840428.
 5999999999767169 1823836.8000000000465661, 840528.7000000000698492 1823837.6000000000931323, 840529.5000000000000000 1823737.5000000000000000, 840531.2000000000698492 1823537.3000000000465661, 840431.0999999999767169 1823536.5000000000000000, 840331.0000000000000000 1823535.6000000000931323)), ((843460.0730511258589104 1823962.8622951649595052, 843444.5400000000372529 1824040.7800000000279397, 843519.4599999999627471 1824060.4499999999534339, 843528.0111173285404220 1824063.5803197363857180, 843528.0111173287732527 1824063.5803197363857180, 843620.2600000000093132 1824097.3500000000931323, 843667.4100000000325963 1824085.7399999999906868, 843767.7299999999813735 1824062.5700000000651926, 843780.8399999999674037 1824051.6699999999254942, 843825.2199999999720603 1824013.0100000000093132, 843877.5100000000093132 1823986.4299999999348074, 843917.2201316761784256 1823966.8100277709309012, 843731.2000000000698492 1823965.1999999999534339, 843730.4000000000232831 1824065.3000000000465661, 
 843530.2002663819584996 1824063.5666689730715007, 843531.0000000000000000 1823963.5000000000000000, 843460.0730511258589104 1823962.8622951649595052)), ((850638.5999999999767169 1824024.4000000001396984, 850637.7000000000698492 1824124.5000000000000000, 850838.0000000000000000 1824126.1999999999534339, 850838.8000000000465661 1824026.1000000000931323, 850638.5999999999767169 1824024.4000000001396984)), ((840225.8000000000465661 1824135.4000000001396984, 840325.9000000000232831 1824136.1999999999534339, 840326.7000000000698492 1824036.1000000000931323, 840226.5999999999767169 1824035.3000000000465661, 840225.8000000000465661 1824135.4000000001396984)), ((840125.7000000000698492 1824134.5000000000000000, 840124.8000000000465661 1824234.6000000000931323, 840224.9000000000232831 1824235.5000000000000000, 840225.8000000000465661 1824135.4000000001396984, 840125.7000000000698492 1824134.5000000000000000)), ((849436.1068061739206314 1824157.9318911028094590, 849493.6600000000325963 1824146
 .6999999999534339, 849536.2498576241778210 1824154.0436131369788200, 849536.5999999999767169 1824115.1000000000931323, 849436.5000000000000000 1824114.1999999999534339, 849436.1068061739206314 1824157.9318911028094590)), ((840525.2000000000698492 1824238.1000000000931323, 840524.4000000000232831 1824338.1999999999534339, 840624.5000000000000000 1824339.0000000000000000, 840625.3000000000465661 1824238.9000000001396984, 840525.2000000000698492 1824238.1000000000931323)), ((846747.9607268684776500 1824591.7584577207453549, 846760.2700000000186265 1824522.7199999999720603, 846774.3726710098562762 1824491.8757540725637227, 846730.0999999999767169 1824491.5000000000000000, 846729.3000000000465661 1824591.6000000000931323, 846728.6535641215741634 1824667.7273310977034271, 846739.2399999999906868 1824640.6699999999254942, 846747.9607268683612347 1824591.7584577207453549, 846747.9607268684776500 1824591.7584577207453549)), ((840776.0005421064561233 1824640.6855193595401943, 840779.589999999
 9674037 1824607.6200000001117587, 840807.0999999999767169 1824552.7900000000372529, 840806.3712267073569819 1824540.8504905498120934, 840722.9000000000232831 1824540.1000000000931323, 840722.0000000000000000 1824640.1999999997206032, 840721.1999999999534339 1824740.3000000000465661, 840720.3000000000465661 1824840.3999999999068677, 840777.3063839530805126 1824840.9125449107959867, 840785.6900000001769513 1824830.9299999997019768, 840786.8100000001722947 1824816.9199999999254942, 840778.1500000000232831 1824776.8000000000465661, 840794.4599999999627471 1824741.9000000001396984, 840794.1298595240805298 1824740.9557130229659379, 840771.9899999999906868 1824677.6300000001210719, 840776.0005421064561233 1824640.6855193595401943)), ((846774.3828207085607573 1824491.8535554548725486, 846781.7000000000698492 1824475.8500000000931323, 846742.8800000000046566 1824449.4899999999906868, 846730.5065471010748297 1824446.2829279752913862, 846730.0999999999767169 1824491.5000000000000000, 846774.38
 28207085607573 1824491.8535554548725486)), ((852337.0000000000000000 1824439.4000000001396984, 852336.0999999999767169 1824539.5000000000000000, 852436.2000000000698492 1824540.4000000001396984, 852437.0999999999767169 1824440.3000000000465661, 852337.0000000000000000 1824439.4000000001396984)), ((840420.8000000000465661 1824737.6999999999534339, 840420.0000000000000000 1824837.8000000002793968, 840620.1999999999534339 1824839.6000000000931323, 840621.0999999998603016 1824739.5000000000000000, 840420.8000000000465661 1824737.6999999999534339)), ((840418.1109029258368537 1825059.1317967977374792, 840498.3599999999860302 1825064.7299999999813735, 840518.2380844965809956 1825056.9086021005641669, 840518.2380844965809956 1825056.9086021010298282, 840555.6199999998789281 1825042.1999999997206032, 840618.2927486911648884 1825062.8509511181619018, 840618.4999999998835847 1825039.8000000002793968, 840618.3042305267881602 1825062.8547344340477139, 840630.4899999999906868 1825066.870000000111
 7587, 840706.5500000000465661 1824953.3900000001303852, 840733.0999999998603016 1824893.5500000002793968, 840777.2884344332851470 1824840.9339177750516683, 840620.1999999999534339 1824839.6000000000931323, 840619.3000000000465661 1824939.6999999999534339, 840319.0000000000000000 1824937.1000000000931323, 840318.1999999999534339 1825037.1999999999534339, 840317.3000000000465661 1825137.2999999998137355, 840349.7489700233563781 1825137.5917489812709391, 840359.7199999999720603 1825120.6100000001024455, 840367.2199999999720603 1825063.6099999998696148, 840400.3100000000558794 1825057.8900000001303852, 840418.1109029258368537 1825059.1317967977374792)), ((840285.5496141483308747 1825237.1534434701316059, 840321.1199999999953434 1825186.3500000000931323, 840349.7292272578924894 1825137.6253730582538992, 840217.1999999999534339 1825136.5000000000000000, 840216.3000000000465661 1825236.6000000000931323, 840164.7065963832428679 1825236.1361232441850007, 840198.2300000000977889 1825273.40000
 00001396984, 840216.0324496603570879 1825270.0772362546995282, 840244.3599999999860302 1825264.7900000000372529, 840276.5200000000186265 1825250.0500000000465661, 840285.5496141483308747 1825237.1534434701316059)))
+</op>
 </test>
 </case>
 

-----------------------------------------------------------------------

Summary of changes:
 NEWS                                               |   1 +
 doc/example.cpp                                    | 102 ++++----
 include/geos/geom/GeometryFactory.h                |  14 +-
 include/geos/geom/util/GeometryCombiner.h          |  11 +-
 include/geos/linearref/LinearGeometryBuilder.h     |   2 +-
 include/geos/operation/linemerge/LineMerger.h      |   2 +-
 .../geos/operation/union/CascadedPolygonUnion.h    |  37 ---
 include/geos/operation/union/CascadedUnion.h       |   2 +-
 include/geos/operation/union/Makefile.am           |   1 +
 include/geos/operation/union/OverlapUnion.h        | 126 ++++++++++
 src/geom/GeometryFactory.cpp                       |  10 +-
 src/geom/util/GeometryCombiner.cpp                 |  37 ++-
 src/operation/buffer/BufferBuilder.cpp             |   2 +-
 src/operation/linemerge/LineMerger.cpp             |   7 +-
 src/operation/union/CascadedPolygonUnion.cpp       | 162 +------------
 src/operation/union/CascadedUnion.cpp              |   8 +-
 src/operation/union/Makefile.am                    |   1 +
 src/operation/union/OverlapUnion.cpp               | 267 +++++++++++++++++++++
 src/triangulate/quadedge/QuadEdgeSubdivision.cpp   |  18 +-
 tests/unit/geom/GeometryCollectionTest.cpp         |   4 +-
 tests/unit/geom/GeometryFactoryTest.cpp            |  21 +-
 tests/unit/operation/linemerge/LineMergerTest.cpp  |  15 +-
 tests/unit/operation/union/CoverageUnionTest.cpp   |  18 +-
 tests/xmltester/tests/issue/issue-geos-837.xml     |   4 +-
 24 files changed, 538 insertions(+), 334 deletions(-)
 create mode 100644 include/geos/operation/union/OverlapUnion.h
 create mode 100644 src/operation/union/OverlapUnion.cpp


hooks/post-receive
-- 
GEOS


More information about the geos-commits mailing list