From a4fd88094f08edc76053106ad66411c9b88b6340 Mon Sep 17 00:00:00 2001 From: rraphael Date: Wed, 2 Dec 2020 12:28:17 +0100 Subject: [PATCH] add import stl file --- .../ExchangePlugin_ImportFeature.cpp | 3 + src/ExchangePlugin/plugin-Exchange.xml | 28 +- src/GeomAlgoAPI/CMakeLists.txt | 2 + src/GeomAlgoAPI/GeomAlgoAPI_STLImport.cpp | 47 + src/GeomAlgoAPI/GeomAlgoAPI_STLImport.h | 32 + .../stl-examples/cubeCylinder_ASCII.stl | 856 ++++++++++++++++++ .../stl-examples/cubeCylinder_BIN.stl | Bin 0 -> 6184 bytes .../tst_STL-import/import.py | 22 + 8 files changed, 985 insertions(+), 5 deletions(-) create mode 100644 src/GeomAlgoAPI/GeomAlgoAPI_STLImport.cpp create mode 100644 src/GeomAlgoAPI/GeomAlgoAPI_STLImport.h create mode 100644 test.squish/shared/testdata/exchange/stl-examples/cubeCylinder_ASCII.stl create mode 100644 test.squish/shared/testdata/exchange/stl-examples/cubeCylinder_BIN.stl create mode 100644 test.squish/suite_FEATURE_EXCHANGE/tst_STL-import/import.py diff --git a/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp b/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp index 24c821f1c..ee9e7a798 100644 --- a/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp +++ b/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -187,6 +188,8 @@ void ExchangePlugin_ImportFeature::importFile(const std::string& theFileName) theMaterialShape, anError); } else if (anExtension == "IGES" || anExtension == "IGS") { aGeomShape = IGESImport(theFileName, anExtension, anError); + } else if (anExtension == "STL") { + aGeomShape = STLImport(theFileName, anError); } else { anError = "Unsupported format: " + anExtension; } diff --git a/src/ExchangePlugin/plugin-Exchange.xml b/src/ExchangePlugin/plugin-Exchange.xml index 8f2445633..c6f58a196 100644 --- a/src/ExchangePlugin/plugin-Exchange.xml +++ b/src/ExchangePlugin/plugin-Exchange.xml @@ -5,9 +5,9 @@ helpfile="importFeature.html" internal="1"> - + - + - + + + + + + + - + - + @@ -66,6 +77,13 @@ + + + + + diff --git a/src/GeomAlgoAPI/CMakeLists.txt b/src/GeomAlgoAPI/CMakeLists.txt index a03ae213f..1948f8161 100644 --- a/src/GeomAlgoAPI/CMakeLists.txt +++ b/src/GeomAlgoAPI/CMakeLists.txt @@ -50,6 +50,7 @@ SET(PROJECT_HEADERS GeomAlgoAPI_BREPExport.h GeomAlgoAPI_STEPExport.h GeomAlgoAPI_STLExport.h + GeomAlgoAPI_STLImport.h GeomAlgoAPI_IGESExport.h GeomAlgoAPI_Transform.h GeomAlgoAPI_ShapeTools.h @@ -117,6 +118,7 @@ SET(PROJECT_SOURCES GeomAlgoAPI_BREPExport.cpp GeomAlgoAPI_STEPExport.cpp GeomAlgoAPI_STLExport.cpp + GeomAlgoAPI_STLImport.cpp GeomAlgoAPI_IGESExport.cpp GeomAlgoAPI_Transform.cpp GeomAlgoAPI_ShapeTools.cpp diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_STLImport.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_STLImport.cpp new file mode 100644 index 000000000..1c0c6ce4c --- /dev/null +++ b/src/GeomAlgoAPI/GeomAlgoAPI_STLImport.cpp @@ -0,0 +1,47 @@ +// Copyright (C) 2014-2020 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include +#include "GeomAlgoAPI_Tools.h" +#include +#include + + +std::shared_ptr STLImport(const std::string& theFileName, + std::string& theError) +{ + TopoDS_Shape aResShape; + StlAPI_Reader aReader; + + try + { + if(!aReader.Read(aResShape, theFileName.c_str())) + { + theError = "Can't import file."; + aResShape.Nullify(); + } + } + catch (Standard_Failure const& anException) { + theError = anException.GetMessageString(); + aResShape.Nullify(); + } + std::shared_ptr aGeomShape(new GeomAPI_Shape); + aGeomShape->setImpl(new TopoDS_Shape(aResShape)); + return aGeomShape; +} diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_STLImport.h b/src/GeomAlgoAPI/GeomAlgoAPI_STLImport.h new file mode 100644 index 000000000..8f491c723 --- /dev/null +++ b/src/GeomAlgoAPI/GeomAlgoAPI_STLImport.h @@ -0,0 +1,32 @@ +// Copyright (C) 2014-2020 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +#ifndef GEOMALGOAPI_STLIMPORT_H_ +#define GEOMALGOAPI_STLPIMPORT_H_ + +#include +#include + +#include + +/// Implementation of the import STL files algorithms +GEOMALGOAPI_EXPORT +std::shared_ptr STLImport(const std::string& theFileName, + std::string& theError); + +#endif /* GEOMALGOAPI_STLIMPORT_H_ */ diff --git a/test.squish/shared/testdata/exchange/stl-examples/cubeCylinder_ASCII.stl b/test.squish/shared/testdata/exchange/stl-examples/cubeCylinder_ASCII.stl new file mode 100644 index 000000000..b4b45cbda --- /dev/null +++ b/test.squish/shared/testdata/exchange/stl-examples/cubeCylinder_ASCII.stl @@ -0,0 +1,856 @@ +solid + facet normal 0.000000e+00 0.000000e+00 -1.000000e+00 + outer loop + vertex -1.250000e-01 6.250000e-02 0.000000e+00 + vertex -7.242166e-02 9.629005e-02 0.000000e+00 + vertex -6.250000e-02 6.250000e-02 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 -0.000000e+00 -1.000000e+00 + outer loop + vertex -9.903656e-02 1.193520e-01 0.000000e+00 + vertex -7.242166e-02 9.629005e-02 0.000000e+00 + vertex -1.250000e-01 6.250000e-02 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 -1.000000e+00 + outer loop + vertex -1.338947e-01 1.243638e-01 0.000000e+00 + vertex -9.903656e-02 1.193520e-01 0.000000e+00 + vertex -1.250000e-01 6.250000e-02 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 -1.000000e+00 + outer loop + vertex -1.659288e-01 1.097343e-01 0.000000e+00 + vertex -1.338947e-01 1.243638e-01 0.000000e+00 + vertex -1.250000e-01 6.250000e-02 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 -0.000000e+00 -1.000000e+00 + outer loop + vertex -1.659288e-01 1.097343e-01 0.000000e+00 + vertex -1.250000e-01 6.250000e-02 0.000000e+00 + vertex -1.849683e-01 8.010828e-02 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 -1.000000e+00 + outer loop + vertex -1.849683e-01 8.010828e-02 0.000000e+00 + vertex -1.250000e-01 6.250000e-02 0.000000e+00 + vertex -1.849683e-01 4.489172e-02 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 -1.000000e+00 + outer loop + vertex -1.849683e-01 4.489172e-02 0.000000e+00 + vertex -1.250000e-01 6.250000e-02 0.000000e+00 + vertex -1.659288e-01 1.526565e-02 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 -1.000000e+00 + outer loop + vertex -1.250000e-01 6.250000e-02 0.000000e+00 + vertex -1.338947e-01 6.361600e-04 0.000000e+00 + vertex -1.659288e-01 1.526565e-02 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 -0.000000e+00 -1.000000e+00 + outer loop + vertex -1.250000e-01 6.250000e-02 0.000000e+00 + vertex -9.903656e-02 5.648000e-03 0.000000e+00 + vertex -1.338947e-01 6.361600e-04 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 -1.000000e+00 + outer loop + vertex -1.250000e-01 6.250000e-02 0.000000e+00 + vertex -7.242166e-02 2.870995e-02 0.000000e+00 + vertex -9.903656e-02 5.648000e-03 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 -1.000000e+00 + outer loop + vertex -1.250000e-01 6.250000e-02 0.000000e+00 + vertex -6.250000e-02 6.250000e-02 0.000000e+00 + vertex -7.242166e-02 2.870995e-02 0.000000e+00 + endloop + endfacet + facet normal 9.594930e-01 2.817326e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 3.125000e-02 + vertex -6.250000e-02 6.250000e-02 0.000000e+00 + vertex -7.242166e-02 9.629005e-02 0.000000e+00 + endloop + endfacet + facet normal 9.594930e-01 2.817326e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 3.125000e-02 + vertex -6.250000e-02 6.250000e-02 3.125000e-02 + vertex -6.250000e-02 6.250000e-02 0.000000e+00 + endloop + endfacet + facet normal 6.548607e-01 7.557496e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 0.000000e+00 + vertex -9.903656e-02 1.193520e-01 0.000000e+00 + vertex -9.903656e-02 1.193520e-01 3.125000e-02 + endloop + endfacet + facet normal 6.548607e-01 7.557496e-01 -0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 0.000000e+00 + vertex -9.903656e-02 1.193520e-01 3.125000e-02 + vertex -7.242166e-02 9.629005e-02 3.125000e-02 + endloop + endfacet + facet normal 1.423148e-01 9.898214e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 1.193520e-01 0.000000e+00 + vertex -1.338947e-01 1.243638e-01 0.000000e+00 + vertex -1.338947e-01 1.243638e-01 3.125000e-02 + endloop + endfacet + facet normal 1.423148e-01 9.898214e-01 -0.000000e+00 + outer loop + vertex -9.903656e-02 1.193520e-01 0.000000e+00 + vertex -1.338947e-01 1.243638e-01 3.125000e-02 + vertex -9.903656e-02 1.193520e-01 3.125000e-02 + endloop + endfacet + facet normal -4.154150e-01 9.096320e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 1.243638e-01 0.000000e+00 + vertex -1.659288e-01 1.097343e-01 0.000000e+00 + vertex -1.659288e-01 1.097343e-01 3.125000e-02 + endloop + endfacet + facet normal -4.154150e-01 9.096320e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 1.243638e-01 0.000000e+00 + vertex -1.659288e-01 1.097343e-01 3.125000e-02 + vertex -1.338947e-01 1.243638e-01 3.125000e-02 + endloop + endfacet + facet normal -8.412536e-01 5.406407e-01 0.000000e+00 + outer loop + vertex -1.849683e-01 8.010828e-02 3.125000e-02 + vertex -1.659288e-01 1.097343e-01 0.000000e+00 + vertex -1.849683e-01 8.010828e-02 0.000000e+00 + endloop + endfacet + facet normal -8.412536e-01 5.406407e-01 0.000000e+00 + outer loop + vertex -1.849683e-01 8.010828e-02 3.125000e-02 + vertex -1.659288e-01 1.097343e-01 3.125000e-02 + vertex -1.659288e-01 1.097343e-01 0.000000e+00 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex -1.849683e-01 4.489172e-02 0.000000e+00 + vertex -1.849683e-01 4.489172e-02 3.125000e-02 + vertex -1.849683e-01 8.010828e-02 0.000000e+00 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex -1.849683e-01 4.489172e-02 3.125000e-02 + vertex -1.849683e-01 8.010828e-02 3.125000e-02 + vertex -1.849683e-01 8.010828e-02 0.000000e+00 + endloop + endfacet + facet normal -8.412536e-01 -5.406408e-01 -0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 3.125000e-02 + vertex -1.849683e-01 4.489172e-02 0.000000e+00 + vertex -1.659288e-01 1.526565e-02 0.000000e+00 + endloop + endfacet + facet normal -8.412536e-01 -5.406408e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 3.125000e-02 + vertex -1.849683e-01 4.489172e-02 3.125000e-02 + vertex -1.849683e-01 4.489172e-02 0.000000e+00 + endloop + endfacet + facet normal -4.154151e-01 -9.096320e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 0.000000e+00 + vertex -1.338947e-01 6.361600e-04 0.000000e+00 + vertex -1.338947e-01 6.361600e-04 3.125000e-02 + endloop + endfacet + facet normal -4.154151e-01 -9.096320e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 0.000000e+00 + vertex -1.338947e-01 6.361600e-04 3.125000e-02 + vertex -1.659288e-01 1.526565e-02 3.125000e-02 + endloop + endfacet + facet normal 1.423148e-01 -9.898214e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 6.361600e-04 0.000000e+00 + vertex -9.903656e-02 5.648000e-03 0.000000e+00 + vertex -9.903656e-02 5.648000e-03 3.125000e-02 + endloop + endfacet + facet normal 1.423148e-01 -9.898214e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 6.361600e-04 0.000000e+00 + vertex -9.903656e-02 5.648000e-03 3.125000e-02 + vertex -1.338947e-01 6.361600e-04 3.125000e-02 + endloop + endfacet + facet normal 6.548608e-01 -7.557495e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 5.648000e-03 0.000000e+00 + vertex -7.242166e-02 2.870995e-02 0.000000e+00 + vertex -7.242166e-02 2.870995e-02 3.125000e-02 + endloop + endfacet + facet normal 6.548608e-01 -7.557495e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 5.648000e-03 0.000000e+00 + vertex -7.242166e-02 2.870995e-02 3.125000e-02 + vertex -9.903656e-02 5.648000e-03 3.125000e-02 + endloop + endfacet + facet normal 9.594930e-01 -2.817326e-01 0.000000e+00 + outer loop + vertex -6.250000e-02 6.250000e-02 3.125000e-02 + vertex -7.242166e-02 2.870995e-02 0.000000e+00 + vertex -6.250000e-02 6.250000e-02 0.000000e+00 + endloop + endfacet + facet normal 9.594930e-01 -2.817326e-01 0.000000e+00 + outer loop + vertex -6.250000e-02 6.250000e-02 3.125000e-02 + vertex -7.242166e-02 2.870995e-02 3.125000e-02 + vertex -7.242166e-02 2.870995e-02 0.000000e+00 + endloop + endfacet + facet normal 9.594930e-01 2.817326e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 6.250000e-02 + vertex -6.250000e-02 6.250000e-02 3.125000e-02 + vertex -7.242166e-02 9.629005e-02 3.125000e-02 + endloop + endfacet + facet normal 9.594930e-01 2.817326e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 6.250000e-02 + vertex -6.250000e-02 6.250000e-02 6.250000e-02 + vertex -6.250000e-02 6.250000e-02 3.125000e-02 + endloop + endfacet + facet normal 6.548607e-01 7.557496e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 3.125000e-02 + vertex -9.903656e-02 1.193520e-01 3.125000e-02 + vertex -9.903656e-02 1.193520e-01 6.250000e-02 + endloop + endfacet + facet normal 6.548607e-01 7.557496e-01 -0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 3.125000e-02 + vertex -9.903656e-02 1.193520e-01 6.250000e-02 + vertex -7.242166e-02 9.629005e-02 6.250000e-02 + endloop + endfacet + facet normal 1.423148e-01 9.898214e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 1.193520e-01 3.125000e-02 + vertex -1.338947e-01 1.243638e-01 3.125000e-02 + vertex -1.338947e-01 1.243638e-01 6.250000e-02 + endloop + endfacet + facet normal 1.423148e-01 9.898214e-01 -0.000000e+00 + outer loop + vertex -9.903656e-02 1.193520e-01 3.125000e-02 + vertex -1.338947e-01 1.243638e-01 6.250000e-02 + vertex -9.903656e-02 1.193520e-01 6.250000e-02 + endloop + endfacet + facet normal -4.154150e-01 9.096320e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 1.243638e-01 3.125000e-02 + vertex -1.659288e-01 1.097343e-01 3.125000e-02 + vertex -1.659288e-01 1.097343e-01 6.250000e-02 + endloop + endfacet + facet normal -4.154150e-01 9.096320e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 1.243638e-01 3.125000e-02 + vertex -1.659288e-01 1.097343e-01 6.250000e-02 + vertex -1.338947e-01 1.243638e-01 6.250000e-02 + endloop + endfacet + facet normal -8.412536e-01 5.406407e-01 0.000000e+00 + outer loop + vertex -1.849683e-01 8.010828e-02 6.250000e-02 + vertex -1.659288e-01 1.097343e-01 3.125000e-02 + vertex -1.849683e-01 8.010828e-02 3.125000e-02 + endloop + endfacet + facet normal -8.412536e-01 5.406407e-01 0.000000e+00 + outer loop + vertex -1.849683e-01 8.010828e-02 6.250000e-02 + vertex -1.659288e-01 1.097343e-01 6.250000e-02 + vertex -1.659288e-01 1.097343e-01 3.125000e-02 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex -1.849683e-01 4.489172e-02 3.125000e-02 + vertex -1.849683e-01 4.489172e-02 6.250000e-02 + vertex -1.849683e-01 8.010828e-02 3.125000e-02 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex -1.849683e-01 4.489172e-02 6.250000e-02 + vertex -1.849683e-01 8.010828e-02 6.250000e-02 + vertex -1.849683e-01 8.010828e-02 3.125000e-02 + endloop + endfacet + facet normal -8.412536e-01 -5.406408e-01 -0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 6.250000e-02 + vertex -1.849683e-01 4.489172e-02 3.125000e-02 + vertex -1.659288e-01 1.526565e-02 3.125000e-02 + endloop + endfacet + facet normal -8.412536e-01 -5.406408e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 6.250000e-02 + vertex -1.849683e-01 4.489172e-02 6.250000e-02 + vertex -1.849683e-01 4.489172e-02 3.125000e-02 + endloop + endfacet + facet normal -4.154151e-01 -9.096320e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 3.125000e-02 + vertex -1.338947e-01 6.361600e-04 3.125000e-02 + vertex -1.338947e-01 6.361600e-04 6.250000e-02 + endloop + endfacet + facet normal -4.154151e-01 -9.096320e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 3.125000e-02 + vertex -1.338947e-01 6.361600e-04 6.250000e-02 + vertex -1.659288e-01 1.526565e-02 6.250000e-02 + endloop + endfacet + facet normal 1.423148e-01 -9.898214e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 6.361600e-04 3.125000e-02 + vertex -9.903656e-02 5.648000e-03 3.125000e-02 + vertex -9.903656e-02 5.648000e-03 6.250000e-02 + endloop + endfacet + facet normal 1.423148e-01 -9.898214e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 6.361600e-04 3.125000e-02 + vertex -9.903656e-02 5.648000e-03 6.250000e-02 + vertex -1.338947e-01 6.361600e-04 6.250000e-02 + endloop + endfacet + facet normal 6.548608e-01 -7.557495e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 5.648000e-03 3.125000e-02 + vertex -7.242166e-02 2.870995e-02 3.125000e-02 + vertex -7.242166e-02 2.870995e-02 6.250000e-02 + endloop + endfacet + facet normal 6.548608e-01 -7.557495e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 5.648000e-03 3.125000e-02 + vertex -7.242166e-02 2.870995e-02 6.250000e-02 + vertex -9.903656e-02 5.648000e-03 6.250000e-02 + endloop + endfacet + facet normal 9.594930e-01 -2.817326e-01 0.000000e+00 + outer loop + vertex -6.250000e-02 6.250000e-02 6.250000e-02 + vertex -7.242166e-02 2.870995e-02 3.125000e-02 + vertex -6.250000e-02 6.250000e-02 3.125000e-02 + endloop + endfacet + facet normal 9.594930e-01 -2.817326e-01 0.000000e+00 + outer loop + vertex -6.250000e-02 6.250000e-02 6.250000e-02 + vertex -7.242166e-02 2.870995e-02 6.250000e-02 + vertex -7.242166e-02 2.870995e-02 3.125000e-02 + endloop + endfacet + facet normal 9.594930e-01 2.817326e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 9.375000e-02 + vertex -6.250000e-02 6.250000e-02 6.250000e-02 + vertex -7.242166e-02 9.629005e-02 6.250000e-02 + endloop + endfacet + facet normal 9.594930e-01 2.817326e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 9.375000e-02 + vertex -6.250000e-02 6.250000e-02 9.375000e-02 + vertex -6.250000e-02 6.250000e-02 6.250000e-02 + endloop + endfacet + facet normal 6.548607e-01 7.557496e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 6.250000e-02 + vertex -9.903656e-02 1.193520e-01 6.250000e-02 + vertex -9.903656e-02 1.193520e-01 9.375000e-02 + endloop + endfacet + facet normal 6.548607e-01 7.557496e-01 -0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 6.250000e-02 + vertex -9.903656e-02 1.193520e-01 9.375000e-02 + vertex -7.242166e-02 9.629005e-02 9.375000e-02 + endloop + endfacet + facet normal 1.423148e-01 9.898214e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 1.193520e-01 6.250000e-02 + vertex -1.338947e-01 1.243638e-01 6.250000e-02 + vertex -1.338947e-01 1.243638e-01 9.375000e-02 + endloop + endfacet + facet normal 1.423148e-01 9.898214e-01 -0.000000e+00 + outer loop + vertex -9.903656e-02 1.193520e-01 6.250000e-02 + vertex -1.338947e-01 1.243638e-01 9.375000e-02 + vertex -9.903656e-02 1.193520e-01 9.375000e-02 + endloop + endfacet + facet normal -4.154150e-01 9.096320e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 1.243638e-01 6.250000e-02 + vertex -1.659288e-01 1.097343e-01 6.250000e-02 + vertex -1.659288e-01 1.097343e-01 9.375000e-02 + endloop + endfacet + facet normal -4.154150e-01 9.096320e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 1.243638e-01 6.250000e-02 + vertex -1.659288e-01 1.097343e-01 9.375000e-02 + vertex -1.338947e-01 1.243638e-01 9.375000e-02 + endloop + endfacet + facet normal -8.412536e-01 5.406407e-01 0.000000e+00 + outer loop + vertex -1.849683e-01 8.010828e-02 9.375000e-02 + vertex -1.659288e-01 1.097343e-01 6.250000e-02 + vertex -1.849683e-01 8.010828e-02 6.250000e-02 + endloop + endfacet + facet normal -8.412536e-01 5.406407e-01 0.000000e+00 + outer loop + vertex -1.849683e-01 8.010828e-02 9.375000e-02 + vertex -1.659288e-01 1.097343e-01 9.375000e-02 + vertex -1.659288e-01 1.097343e-01 6.250000e-02 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex -1.849683e-01 4.489172e-02 6.250000e-02 + vertex -1.849683e-01 4.489172e-02 9.375000e-02 + vertex -1.849683e-01 8.010828e-02 6.250000e-02 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex -1.849683e-01 4.489172e-02 9.375000e-02 + vertex -1.849683e-01 8.010828e-02 9.375000e-02 + vertex -1.849683e-01 8.010828e-02 6.250000e-02 + endloop + endfacet + facet normal -8.412536e-01 -5.406408e-01 -0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 9.375000e-02 + vertex -1.849683e-01 4.489172e-02 6.250000e-02 + vertex -1.659288e-01 1.526565e-02 6.250000e-02 + endloop + endfacet + facet normal -8.412536e-01 -5.406408e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 9.375000e-02 + vertex -1.849683e-01 4.489172e-02 9.375000e-02 + vertex -1.849683e-01 4.489172e-02 6.250000e-02 + endloop + endfacet + facet normal -4.154151e-01 -9.096320e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 6.250000e-02 + vertex -1.338947e-01 6.361600e-04 6.250000e-02 + vertex -1.338947e-01 6.361600e-04 9.375000e-02 + endloop + endfacet + facet normal -4.154151e-01 -9.096320e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 6.250000e-02 + vertex -1.338947e-01 6.361600e-04 9.375000e-02 + vertex -1.659288e-01 1.526565e-02 9.375000e-02 + endloop + endfacet + facet normal 1.423148e-01 -9.898214e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 6.361600e-04 6.250000e-02 + vertex -9.903656e-02 5.648000e-03 6.250000e-02 + vertex -9.903656e-02 5.648000e-03 9.375000e-02 + endloop + endfacet + facet normal 1.423148e-01 -9.898214e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 6.361600e-04 6.250000e-02 + vertex -9.903656e-02 5.648000e-03 9.375000e-02 + vertex -1.338947e-01 6.361600e-04 9.375000e-02 + endloop + endfacet + facet normal 6.548608e-01 -7.557495e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 5.648000e-03 6.250000e-02 + vertex -7.242166e-02 2.870995e-02 6.250000e-02 + vertex -7.242166e-02 2.870995e-02 9.375000e-02 + endloop + endfacet + facet normal 6.548608e-01 -7.557495e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 5.648000e-03 6.250000e-02 + vertex -7.242166e-02 2.870995e-02 9.375000e-02 + vertex -9.903656e-02 5.648000e-03 9.375000e-02 + endloop + endfacet + facet normal 9.594930e-01 -2.817326e-01 0.000000e+00 + outer loop + vertex -6.250000e-02 6.250000e-02 9.375000e-02 + vertex -7.242166e-02 2.870995e-02 6.250000e-02 + vertex -6.250000e-02 6.250000e-02 6.250000e-02 + endloop + endfacet + facet normal 9.594930e-01 -2.817326e-01 0.000000e+00 + outer loop + vertex -6.250000e-02 6.250000e-02 9.375000e-02 + vertex -7.242166e-02 2.870995e-02 9.375000e-02 + vertex -7.242166e-02 2.870995e-02 6.250000e-02 + endloop + endfacet + facet normal 9.594930e-01 2.817326e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 1.250000e-01 + vertex -6.250000e-02 6.250000e-02 9.375000e-02 + vertex -7.242166e-02 9.629005e-02 9.375000e-02 + endloop + endfacet + facet normal 9.594930e-01 2.817326e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 1.250000e-01 + vertex -6.250000e-02 6.250000e-02 1.250000e-01 + vertex -6.250000e-02 6.250000e-02 9.375000e-02 + endloop + endfacet + facet normal 6.548607e-01 7.557496e-01 0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 9.375000e-02 + vertex -9.903656e-02 1.193520e-01 9.375000e-02 + vertex -9.903656e-02 1.193520e-01 1.250000e-01 + endloop + endfacet + facet normal 6.548607e-01 7.557496e-01 -0.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 9.375000e-02 + vertex -9.903656e-02 1.193520e-01 1.250000e-01 + vertex -7.242166e-02 9.629005e-02 1.250000e-01 + endloop + endfacet + facet normal 1.423148e-01 9.898214e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 1.193520e-01 9.375000e-02 + vertex -1.338947e-01 1.243638e-01 9.375000e-02 + vertex -1.338947e-01 1.243638e-01 1.250000e-01 + endloop + endfacet + facet normal 1.423148e-01 9.898214e-01 -0.000000e+00 + outer loop + vertex -9.903656e-02 1.193520e-01 9.375000e-02 + vertex -1.338947e-01 1.243638e-01 1.250000e-01 + vertex -9.903656e-02 1.193520e-01 1.250000e-01 + endloop + endfacet + facet normal -4.154150e-01 9.096320e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 1.243638e-01 9.375000e-02 + vertex -1.659288e-01 1.097343e-01 9.375000e-02 + vertex -1.659288e-01 1.097343e-01 1.250000e-01 + endloop + endfacet + facet normal -4.154150e-01 9.096320e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 1.243638e-01 9.375000e-02 + vertex -1.659288e-01 1.097343e-01 1.250000e-01 + vertex -1.338947e-01 1.243638e-01 1.250000e-01 + endloop + endfacet + facet normal -8.412536e-01 5.406407e-01 0.000000e+00 + outer loop + vertex -1.849683e-01 8.010828e-02 1.250000e-01 + vertex -1.659288e-01 1.097343e-01 9.375000e-02 + vertex -1.849683e-01 8.010828e-02 9.375000e-02 + endloop + endfacet + facet normal -8.412536e-01 5.406407e-01 0.000000e+00 + outer loop + vertex -1.849683e-01 8.010828e-02 1.250000e-01 + vertex -1.659288e-01 1.097343e-01 1.250000e-01 + vertex -1.659288e-01 1.097343e-01 9.375000e-02 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex -1.849683e-01 4.489172e-02 9.375000e-02 + vertex -1.849683e-01 4.489172e-02 1.250000e-01 + vertex -1.849683e-01 8.010828e-02 9.375000e-02 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex -1.849683e-01 4.489172e-02 1.250000e-01 + vertex -1.849683e-01 8.010828e-02 1.250000e-01 + vertex -1.849683e-01 8.010828e-02 9.375000e-02 + endloop + endfacet + facet normal -8.412536e-01 -5.406408e-01 -0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 1.250000e-01 + vertex -1.849683e-01 4.489172e-02 9.375000e-02 + vertex -1.659288e-01 1.526565e-02 9.375000e-02 + endloop + endfacet + facet normal -8.412536e-01 -5.406408e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 1.250000e-01 + vertex -1.849683e-01 4.489172e-02 1.250000e-01 + vertex -1.849683e-01 4.489172e-02 9.375000e-02 + endloop + endfacet + facet normal -4.154151e-01 -9.096320e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 9.375000e-02 + vertex -1.338947e-01 6.361600e-04 9.375000e-02 + vertex -1.338947e-01 6.361600e-04 1.250000e-01 + endloop + endfacet + facet normal -4.154151e-01 -9.096320e-01 0.000000e+00 + outer loop + vertex -1.659288e-01 1.526565e-02 9.375000e-02 + vertex -1.338947e-01 6.361600e-04 1.250000e-01 + vertex -1.659288e-01 1.526565e-02 1.250000e-01 + endloop + endfacet + facet normal 1.423148e-01 -9.898214e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 6.361600e-04 9.375000e-02 + vertex -9.903656e-02 5.648000e-03 9.375000e-02 + vertex -9.903656e-02 5.648000e-03 1.250000e-01 + endloop + endfacet + facet normal 1.423148e-01 -9.898214e-01 0.000000e+00 + outer loop + vertex -1.338947e-01 6.361600e-04 9.375000e-02 + vertex -9.903656e-02 5.648000e-03 1.250000e-01 + vertex -1.338947e-01 6.361600e-04 1.250000e-01 + endloop + endfacet + facet normal 6.548608e-01 -7.557495e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 5.648000e-03 9.375000e-02 + vertex -7.242166e-02 2.870995e-02 9.375000e-02 + vertex -7.242166e-02 2.870995e-02 1.250000e-01 + endloop + endfacet + facet normal 6.548608e-01 -7.557495e-01 0.000000e+00 + outer loop + vertex -9.903656e-02 5.648000e-03 9.375000e-02 + vertex -7.242166e-02 2.870995e-02 1.250000e-01 + vertex -9.903656e-02 5.648000e-03 1.250000e-01 + endloop + endfacet + facet normal 9.594930e-01 -2.817326e-01 0.000000e+00 + outer loop + vertex -6.250000e-02 6.250000e-02 1.250000e-01 + vertex -7.242166e-02 2.870995e-02 9.375000e-02 + vertex -6.250000e-02 6.250000e-02 9.375000e-02 + endloop + endfacet + facet normal 9.594930e-01 -2.817326e-01 0.000000e+00 + outer loop + vertex -6.250000e-02 6.250000e-02 1.250000e-01 + vertex -7.242166e-02 2.870995e-02 1.250000e-01 + vertex -7.242166e-02 2.870995e-02 9.375000e-02 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 1.250000e-01 + vertex -1.250000e-01 6.250000e-02 1.250000e-01 + vertex -6.250000e-02 6.250000e-02 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex -7.242166e-02 9.629005e-02 1.250000e-01 + vertex -9.903656e-02 1.193520e-01 1.250000e-01 + vertex -1.250000e-01 6.250000e-02 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex -9.903656e-02 1.193520e-01 1.250000e-01 + vertex -1.338947e-01 1.243638e-01 1.250000e-01 + vertex -1.250000e-01 6.250000e-02 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex -1.338947e-01 1.243638e-01 1.250000e-01 + vertex -1.659288e-01 1.097343e-01 1.250000e-01 + vertex -1.250000e-01 6.250000e-02 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex -1.659288e-01 1.097343e-01 1.250000e-01 + vertex -1.849683e-01 8.010828e-02 1.250000e-01 + vertex -1.250000e-01 6.250000e-02 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex -1.250000e-01 6.250000e-02 1.250000e-01 + vertex -1.849683e-01 8.010828e-02 1.250000e-01 + vertex -1.849683e-01 4.489172e-02 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex -1.250000e-01 6.250000e-02 1.250000e-01 + vertex -1.849683e-01 4.489172e-02 1.250000e-01 + vertex -1.659288e-01 1.526565e-02 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex -1.250000e-01 6.250000e-02 1.250000e-01 + vertex -1.659288e-01 1.526565e-02 1.250000e-01 + vertex -1.338947e-01 6.361600e-04 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex -1.250000e-01 6.250000e-02 1.250000e-01 + vertex -1.338947e-01 6.361600e-04 1.250000e-01 + vertex -9.903656e-02 5.648000e-03 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex -7.242166e-02 2.870995e-02 1.250000e-01 + vertex -1.250000e-01 6.250000e-02 1.250000e-01 + vertex -9.903656e-02 5.648000e-03 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex -6.250000e-02 6.250000e-02 1.250000e-01 + vertex -1.250000e-01 6.250000e-02 1.250000e-01 + vertex -7.242166e-02 2.870995e-02 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 -1.000000e+00 0.000000e+00 + outer loop + vertex 1.250000e-01 0.000000e+00 0.000000e+00 + vertex 1.250000e-01 0.000000e+00 1.250000e-01 + vertex 0.000000e+00 0.000000e+00 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 -1.000000e+00 0.000000e+00 + outer loop + vertex 1.250000e-01 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 1.250000e-01 + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 -0.000000e+00 -1.000000e+00 + outer loop + vertex 1.250000e-01 1.250000e-01 0.000000e+00 + vertex 1.250000e-01 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 -1.000000e+00 + outer loop + vertex 0.000000e+00 1.250000e-01 0.000000e+00 + vertex 1.250000e-01 1.250000e-01 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 1.250000e-01 1.250000e-01 + vertex 0.000000e+00 1.250000e-01 0.000000e+00 + endloop + endfacet + facet normal -1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex 0.000000e+00 0.000000e+00 0.000000e+00 + vertex 0.000000e+00 0.000000e+00 1.250000e-01 + vertex 0.000000e+00 1.250000e-01 1.250000e-01 + endloop + endfacet + facet normal 1.000000e+00 0.000000e+00 0.000000e+00 + outer loop + vertex 1.250000e-01 1.250000e-01 1.250000e-01 + vertex 1.250000e-01 0.000000e+00 0.000000e+00 + vertex 1.250000e-01 1.250000e-01 0.000000e+00 + endloop + endfacet + facet normal 1.000000e+00 -0.000000e+00 0.000000e+00 + outer loop + vertex 1.250000e-01 0.000000e+00 1.250000e-01 + vertex 1.250000e-01 0.000000e+00 0.000000e+00 + vertex 1.250000e-01 1.250000e-01 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 1.000000e+00 0.000000e+00 + outer loop + vertex 1.250000e-01 1.250000e-01 1.250000e-01 + vertex 1.250000e-01 1.250000e-01 0.000000e+00 + vertex 0.000000e+00 1.250000e-01 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 1.000000e+00 0.000000e+00 + outer loop + vertex 0.000000e+00 1.250000e-01 1.250000e-01 + vertex 1.250000e-01 1.250000e-01 0.000000e+00 + vertex 0.000000e+00 1.250000e-01 0.000000e+00 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex 1.250000e-01 1.250000e-01 1.250000e-01 + vertex 0.000000e+00 0.000000e+00 1.250000e-01 + vertex 1.250000e-01 0.000000e+00 1.250000e-01 + endloop + endfacet + facet normal 0.000000e+00 0.000000e+00 1.000000e+00 + outer loop + vertex 1.250000e-01 1.250000e-01 1.250000e-01 + vertex 0.000000e+00 1.250000e-01 1.250000e-01 + vertex 0.000000e+00 0.000000e+00 1.250000e-01 + endloop + endfacet +endsolid diff --git a/test.squish/shared/testdata/exchange/stl-examples/cubeCylinder_BIN.stl b/test.squish/shared/testdata/exchange/stl-examples/cubeCylinder_BIN.stl new file mode 100644 index 0000000000000000000000000000000000000000..52219bf54e64269a77fdaf049d33d6cd674d6b3e GIT binary patch literal 6184 zcma)=zl$VQ5XU>!L^Rc4O%y{h5Y(A*6Hzb`e4HYhxOD;GAMa25P>gxK|+xK=}!)(9lu1{5UcYVJzv+t}vx^-~0IzKpF zogDAIb#ij_!RmDHaCyA^@ZfZLWADw^_xD~|9W95>?cC$iFr-U)yOI42hwr@c$@;73 zzRznpwzlIqm$y_BpZ)sd`j_Je6?!CO7i)a}_(PksFaOH~(;i> zw{OliKRo*5c*G?YXd0D@NIr(8NdvA^?TF zBOy`KaaljOczSW?Y=41p$~Ew0&^i)fUO9>~3GweYkIwJk_&C>~sC-9l5^1g?5jx>0 z$|S_AU;MVY_~RyOguFa`wC*EjTyGeb@4b6@a`a8dX0a=BhQzs8slJ9A5fQ4#DC-JD!%Onjj-OGqE(rFL5Ebh+yd)^qRf`%#u$K^# zLcOM!1f{xaQKR8LM5Iu!=?p=su3FS+cnJ|H)RTu+_mZGg*FS3PCQ_(3bya#vP^#;n zuHza)Yp9oiXn09bs_Vax(0ip`0;1szc{0pDT(y0KK6CXF5DhO0O2xFR{`&}>UF{G= z!x`j^DRrQAACag-Bd&fg(J1|v!RzhV)kt8**78CZIj<6kvg26Sy(B6X&qIBsAjnIY z*cSE38ItFUN_8(m4I;=(nAnn+fT%k|RH}PPAF(Ab0a15`s8sioK4ME=0z#fnRxDPY zD=O8!q>tE=mrz%QGeo7jm-G=@L%jq<-AkfU-Anoiy;tfbAnINcmFiy7N9Z$GF9A{a z5>=G>hkHpMp|h)A0;29ENzRy3dEG~-2DL*Yu6jvSs(%9*%Sn#OPCnuu`6;0@{*`j_Y%|~g1m%@VII4xdr4HPdkJdnCWd+Js_rFGsjh$2*i8)c z*j3$2qEg*UP-8bS%&T1$UJ{k+UP9M#4WTv0-#F4$-AkfU-AhnoH=*}x{EZ_--AkfU z-AhnoH=)mb{EZ_--AkfU-AhnoH=(mTesdC{?j>*lQ!1}fV>h819Dgkd;aghBdLy|d zKXO@(Qnf9DwH-CsA~-54szq>AsSjh~b#PRic8ixQ4Oh-lrK0dZC2Us-oA9U)gd)Bq zI4VxNMqed3D$edmq_PG_#Yt=tG0LC+7@x1jztN0GF+(;-wx0kjt`InAkxYC3L=j~) z-ea>2o_{)`0Wr#sP2D6rLVNCJ$~F-c7?u_}(Rn%$lH_G)@qUV+bv{247KJ@FBW!QS p^j=|Z?MTj3yf